- Amazon CognitoでOAuth2.0 Client Credentials Grantを利用する方法をメモする
Client Credentials Grantとは
- OAuth2.0で定義されている認可フローの1つ
- トークンエンドポイントにトークンリクエストを投げ、応答としてアクセストークンを受けとるフロー
- ユーザー認証を行わず、クライアントアプリケーションの認証のみが行われる
Amazon Cognitoでの設定方法
ユーザープール、リソースサーバー、クライアント設定を行う
- Cognito ユーザープールを作成する
- アプリケーションの統合 -> リソースサーバーを作成する
- リソースサーバー名
- リソースサーバー識別子
- カスタムスコープ
- アプリケーションの統合 -> ドメインを設定する
- アプリケーションの統合 -> アプリケーションクライアントを作成する
- アプリケーションタイプ:秘密クライアント
- クライアントのシークレット:クライアントシークレットを生成する
- OAuth2.0許可タイプ:クライアント認証情報
動作確認
-
トークンリクエスト
POST /oauth2/token HTTP/1.1 Host: {ユーザープールドメイン}.auth.ap-northeast-1.amazoncognito.com Authorization: Basic Base64(アプリケーションクライアントID:アプリケーションクライアントシークレット) Content-Type: application/x-www-form-urlencoded Content-Length: 66 grant_type=client_credentials&client_id={アプリケーションクライアントID}
-
トークンレスポンス
{ "access_token":"...", "expires_in":3600, "token_type":"Bearer" }
-
アクセストークンの構造
ヘッダー部
{ "kid": "...", "alg": "RS256" }
ペイロード部
{ "sub":"{アプリケーションクライアントID}", "token_use":"access", "scope":"{クライアントに指定されたカスタムスコープ}", "auth_time":1678174231, "iss":"{ユーザープールドメイン}/ap-northeast-1_...", "exp":"1678177831", "iat":"1678174231", "version":2, "jti":"....", "client_id":"{アプリケーションクライアントID}" }
※
sub
とclient_id
にはアプリケーションクライアントIDが指定される※
scope
にはクライアントに設定したスコープが設定される