月間29,000PV達成! 収益は毎日発生中! ギランバレー症候群に関する情報を集めています

AWS CognitoのClient Credentials Grantを使ってみた話

             
  • 2020.02.29
  • AWS
AWS CognitoのClient Credentials Grantを使ってみた話
Advertisement

 

一時Cognitoを死ぬほど調べたことがあった(AngularアプリにCognitoのユーザ認証を利用した)ので、自称僕よりCognito詳しい人いないマンなんですが、まだまだ知らないことがありました。

Client Credentials Grant」ってやつですが、Cognitoには他にも「何とかGrant」はあります。

どちらかというと、本来のCognitoの用途とは離れているんですが、知らないことがあるのは気持ち悪いので調べてみました。

 

僕のプロフィールはこちら

 

 

そもそもClient Credentials Grantって?

そもそもな話、Cognitoを使ったことがある人なら分かるのですが、Cognitoは「ユーザ認証のためのサービス」と言っても過言ではありません。

Cognitoを使うことで、Cognitoのユーザ認証を通過したユーザだけがAPIを叩けるように認証設定ができたりします。

が、ユーザ認証は必要ないがAPIに認証設定をかけたいケースはそれなりにあるはずです。

例えば、AサービスからBサービスのAPIを叩く場合、ユーザ認証は不要だがAPIの認証自体はかけたいなど。

こんな場合に利用するのが「Client Credentials Grant」だと思ってもらえればOKです。

 

 

Client Credentials Grantを使うための準備

まあ、なんでも実際に使ってみるのが良いということで触ってみましょう。

 

Client Credentials Grant

左メニューの「リソースサーバ」を選択し、「リソースサーバの追加」から上記のように設定します。

リソースサーバはとりあえず登録しないといけないので文句言わずにやりましょう。

※識別子に空白文字とか入れると怒られるので注意。

 

 

Client Credentials Grant2

こんな感じでできたかと思います。

 

 

Client Credentials Grant3

左メニューの「アプリクライアント」から上記のような設定でアプリクライアントを作成します。

※デフォルトでチェックされていますが、「クライアントシークレットを生成」は必要なのでチェックをしておいてください。

 

 

Client Credentials Grant4

左メニューの「アプリクライアントの設定」をクリックし、上記のように設定します。

許可されているOAuthフロー」の「Client credentials」にチェックを入れると、「許可されているカスタムスコープ」に「test_resource/test」が表示されるのでチェックを入れます。

 

 

Client Credentials Grant5

あと、後々使うのでドメインの登録を済ませておきます。

左メニューの「ドメイン名」をクリックし、適当なドメイン名を設定します。

 

 

Advertisement

 

Client Credentials Grantを使ってみよう

詳細情報は以下に記載されています。

URL:「https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/token-endpoint.html」

 

諸々の情報をPOSTしてトークン情報を取得するので、今回はRestlet Clientを使用します。

⇒POSTManとかでも勿論可能。

 

 

Client Credentials Grant6

こんな感じでPOSTします。

METHOD POST
URL https://<あなたのドメイン名>.auth.ap-northeast-1.amazoncognito.com/oauth2/token
Content-Type application/x-www-form-urlencoded
Authorization Basic <トークン>
※トークンは「アプリクライアントID + “:” + アプリクライアントのシークレット」をBase64化したもの。
「https://hogehoge.tk/tool/」とかで変換できます。
grant_type client_credentials
scope 許可されているカスタムスコープで選択した内容。
※今回であれば「test_resource/test」。

 

 

取れた!!

POSTした結果は上記の通りです。

 

ちなみに、「invalid_client」などのエラーが返ってくる場合は大体トークンがミスってると思います。

その辺りの情報も、下記サイトの下の方に詳細が載っています。

URL:「https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/token-endpoint.html」

 

 

API Gatewayとかの設定に使えるよ

当たり前ですが、API Gatewayに認証の設定を行えば、先ほどのトークンを認証情報として利用できます。

そこまでやりたかったんですが、僕のAWS環境にはまだAPI Gatewayがいない&メンドクサイので、下記サイトを見てね。

URL:「https://qiita.com/poruruba/items/3681f1e1f8e72fcaadfa」

 

 

まとめ

トークンのBase64化で「echo -n “【アプリクライアントID】:【アプリクライアントのシークレット】” | base64」を使ったんですが、これが正しくBase64化できておらず、なかなかに苦戦した。。

ではさいなら。

Travelerを知らないの?