認証とPostmanのAPI認証方法

## Postmanの認証機能
APIを使っていると認証しないと使えないものや、アプリケーションでCurrentUserでなければ投稿できない、削除できないなどが出てきます。
その場合ログインしているユーザーであるとかAPIの使用許可を得たユーザーであるなどの認証をさせなければいけません。
Postmanでは認証機能をサポートしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/a5603c0d-98a7-a43e-cc25-788f9fccbc1f.png)
### 認証とは
あなたが誰かかを本人確認すること。

## WebAPIの認証
そもそも認証方式にはどんな種類があるかをまとめます。
#### WebAPIの認証の3つのパターン
認証方式は３パターンに分けられる
1. 標準化されているHTTP認証方式
2. APIキ認証
3. セキュリティートークン
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/2eae6027-2f5f-6f1e-5d71-fbd29e530d6e.png)

##### 標準化されているHTTP認証方式
- <h5>Basic
ユーザー名とパスワードをBase64方式でエンコードして送る。
開発環境などの内部システム認証に使われる。

- <h5>Digest
サーバーとクライアントで共有シークレット（パスワード）を知っていることが前提の方式。
クライアントでユーザー名、パスワード、ランダムな文字列をMD5でハッシュ化し、サーバーに送信する。 サーバー側でもハッシュ値を計算し、 クライアントから送信されたハッシュ値と合致するかを検証する。


- <h5>Bearer
認可サーバーにより発行されたアクセストークンをWebAPIに渡す方法を定めた仕様。OAuth2.0の認可機構として設計されたものだがOAuthに限らず汎用的なHTTP認可に使ってよい。OAuth 2.0をベースにしたOIDCでもリソースアクセス時に利用される。
3つの方式を定義しています。
  1. ヘッダーのAuthorizationに埋め込む方法
  2. リクエストボディーへ埋め込む方法(access_tokenパラメータ)
  3. クエリーパラメーターとして渡す方式(access_tokenパラメータ)

#### OAuthとは
- <h5>OAuth
ユーザーの同意のもと任意のサービスへの認可情報を異常する仕様。認可する過程で認証処理も含まれるため、手軽な認証方式として利用されたが、なりすましなどの脆弱性が指摘されていた。

- <h5>OpenID Connect
OAuth認証による認証レベルは低く問題があった。そこでOAuth認証の手軽さに高い認証レベルを備えたOpenID Connectが作られた。

<br>

##### APIキー認証
APIキーはアカウント情報などはなくアプリケーションを識別する暗号化された単純な文字列。
クライアントがリクエスト内にAPIキーを含めて送る認証方式で、ヘッダーやクエリー、bodyなどサービスによって異なる。
シンプルに実装できる一方、APIキーはクライアントからアクセス可能で簡単に盗まれる可能性があり、キーがあれば誰でも認証を通過できることから、安全性が低い認証方式です。
<br>

##### セキュリティートークン
セキュリティートークンはワンタイムパスワードを生成する機械やソフトウェアのこと。ワンタイムパスワードは使い捨てのパスワードのこと。
強固なセキュリティを実現するため、通常認証とワンタイムパスワードの組み合わせをすることがある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1111652/151f9bfb-914f-ed02-e777-63f48e4248f4.png)

### PostmanのAPI認証サポート
環境変数を使ってログインする方法もありますが、今回は置いておきます。
<br>
Postmanにはタグが５つありますが、認証に使うのは**Authorization**。
ここでリクエストの認証方式を指定します。

[![Image from Gyazo](https://i.gyazo.com/62877df7a28b04ca878391cfb4a70681.png)](https://gyazo.com/62877df7a28b04ca878391cfb4a70681)

クリックします。

[![Image from Gyazo](https://i.gyazo.com/c35114bf3ee6e1952257acc5587db571.png)](https://gyazo.com/c35114bf3ee6e1952257acc5587db571)

Typeで認証方法を選択することができます。今回はbycrytで生成したトークンを送るため、上記で解説した**Bearer**でトークン認証をします。
Bearerを選択すると右にトークンを入力するところが出るので、ユーザー作成で得たトークンを入力します。
<br>
[![Image from Gyazo](https://i.gyazo.com/08591f0d77cc1e3ed8c1f629efc93c64.png)](https://gyazo.com/08591f0d77cc1e3ed8c1f629efc93c64)
これでログイン状態と同じになり、マイクロポストへの投稿や編集、削除などが行えるようになります。
<br>
> 参考サイト
- [Qiita　PostmanでOAuthの設定をしてGoogle APIを実行する手順](https://qiita.com/howdy39/items/cd01cbd3c1109e140fd0)
- [cybozu developer network　OAuth 2.0を使ってcybozu.comのREST APIをPostmanで叩く方法](https://developer.cybozu.io/hc/ja/articles/360018979492-OAuth-2-0を使ってcybozu-comのREST-APIをPostmanで叩く方法)
- [AWS　Postman を使用して REST API を呼び出す](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/how-to-use-postman-to-call-api.html)
- [APIリクエストの各認証方式](https://blog.fujimisakari.com/api-authentication/)
- [プログラミング初心者がアーキテクトっぽく語る　Basic認証、Digest認証、Bearer認証、OAuth認証方式について](https://architecting.hateblo.jp/entry/2020/03/27/130535)
- [プログラミング初心者がアーキテクトっぽく語る　Web API認証方式のパターン](https://architecting.hateblo.jp/entry/2020/03/27/033758)