

WebアプリケーションからALB経由でAPIに接続する際、Cognitoの認証を利用するようにしています。  
ログイン後に、x-amzn-oidc-dataヘッダーが付与されることを期待しているのですが、付与されません。  
x-amzn-oidc-dataに含まれるカスタム属性が必要なのです。

x-amzn-oidc-dataヘッダが付与されない原因としてどのようなことが考えられるでしょうか？

ちなみに、Webアプリケーションは、ReactでAmplifyのライブラリを利用しています。  
クライアントシークレットは無しで、スコープはopenid、レスポンスタイプはコードです。


CC BY-SA 4.0
2022-10-21T01:26:08.033
91708
2022-11-10T15:48:26.460
54936
question
aws
AWS Cognitoを利用した認証後、Cognitoのユーザー情報をAPIで参照したい


今更ですが、参考までにコメントさせてもらいます。利用されようとしている組み合わせが適しておらず、仕組み上うまく動かないです。

React と Cognito の組み合わせの場合、Cognito で認証した後に、トークンを React アプリケーションが受け取ります。React
アプリケーションがバックエンドの API を呼び出す際に、トークンを付けて呼び出し、バックエンドの API
はトークンを検証し、トークン内の情報を活用します。

このトークンの検証をバックエンドのアプリケーションではなく、サービスで行わせたいのであれば、使える AWS のサービスは API Gateway
です。API Gateway の REST API であれば、Cognito Authorizer を、HTTP API であれば JWT
Authorizer を使用できます。

質問主さんは、ALB にトークンの検証をしてもらいたいと期待されていると思われますが、そのような機能はありません。ALB と Cognito
に以下の連携機能はありますが、かなり動作が異なります。  
<https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/listener-
authenticate-users.html>

この ALB の機能は、SPA タイプのアプリケーションではなく、サーバサイドで HTML を生成するタイプのアプリケーションで、Cookie
でセッション管理するようなタイプで使用できる機能です。ブラウザがアプリにアクセスしたときに、ALB が管理している Cookie
が無ければ、未認証とみなし、Cognito の Hosted UI で認証させて、ALB がトークンを受け取り検証します。検証して OK だれば、ALB が
Cookie を発行してその Cookie でそのセッションが認証済みとして扱いつつ、アプリへのアクセスを通過させます。アプリでは HTTP
ヘッダでトークンの情報を受け取れます。

つまり、ブラウザがサーバサイドのアプリケーションにアクセスする際にトークンをつける訳ではありません。以前の通信で ALB が発行した Cookie
が自然と付くだけです。

ALB で期待した動作をさせることはできないので、API Gateway
に変えるか、アプリ自体でトークンを検証するようにライブラリ等を利用することをお勧めします。


CC BY-SA 4.0
2022-11-10T15:48:26.460
92134
2022-11-10T15:48:26.460
5959
91708
answer