最新のAWS AmplifyOIDC Providerの追加方法はこれ!Line、Auth0などの外部認証プロバイダーの追加をAmplifyで対応

最新のAWS AmplifyOIDC Providerの追加方法はこれ!Line、Auth0などの外部認証プロバイダーの追加をAmplifyで対応

こんにちは!

Amplifyで開発を行う際に、ユーザープールの外部サインインへ「カスタムIDP」を追加したくなる時が多々あります。

現在の対話コンソールの対応状況と実現方法を見ていきます。

対話コンソールでは対応していません

結論現状、対話コンソールでのOIDCの追加は対応がされていません。(SAMLプロバイダーも同様)

弊社のCTOもコメントしていますが、Issueを見てみると新たなプルリクエストが作成されており、今後対応が期待されます。

では、現状どのように対応すれば良いでのしょうか?

クラウドフォーメーションへ追記してamplify push!

Amplifyの対話コンソールを通じてのCognito User Poolsへの任意OIDCプロバイダ追加は、現在対応されていません。

現時点での解決策として、ユーザープールへの OIDC ID プロバイダーの追加 – Amazon Cognitoを参照し、amplify/backend/auth配下のAWS Cloud Formation テンプレートを編集、任意のOIDCプロバイダを追加する方法があります。

また、追加したIDPの呼び出し方は、CustomProviderSignInメソッドでIDP名の文字列を指定し実行です。これにより、Cognito User Poolsに設定されたIDPプロバイダ経由の認証が可能になります。

以前にわたし達は上記のクラウドフォーメーション編集で対応した経験がありますが、結構面倒くさかった記憶があります。

そこで、もう1つの方法も紹介しておきます。

管理コンソールで手動で追加、Amplifyの自動化を捨てる

最も手軽で危険な方法です。

危険というのは、amplify auth updateで何かしらを修正すると上書きできてしまう可能性を孕むからです。

ただ、クライアントワークではそうも言っていられない状況もあるかと察しますので、一応やり方を紹介しておきます。LINEを追加するケースを紹介します。

ユーザープールへIDプロバイダーを追加

OpenIDConnectプロバイダーのLINEを作成します。

事前にLINEアプリを作成し、チャンネルIDとチャンネルシークレットを取得しておいてください。

プロバイダー名をLine(任意の名前でOK)と入力し、「oidc エンドポイントの表示」をクリックします。

各種OpenIDConnectのエンドポイントを入力します。

認証エンドポイントhttps://access.line.me/oauth2/v2.1/authorize
トークンエンドポイントhttps://api.line.me/oauth2/v2.1/token
ユーザー情報エンドポイントhttps://api.line.me/v2/profile
Jwks urihttps://access.line.me

アプリクライアントへ、Lineを追加します。

これでインフラ面は終わりです。

あとは、CustomProviderSignInメソッドで呼び出してください。

まとめ

Amplifyが非対応というよりかは、Cognitoが幅広いIDPには非協力的ということですね。ここ数年、Cognitoは外部サインインで指定可能なIDPが徐々に増えてきているので今後期待です。(アメリカ本国で利用されているサービスが優先度高めで実装されているような雰囲気があります)