Amazon CognitoではLINEログインのボットリンク機能は…使えません!(回避方法あり)
できないことが早期に分かることも開発では必要だと思うので、あえて書いておきます。
伝えたいことは表題通りです。
LINEログインのボットリンク機能は、 Amazon CognitoのCognito User Poolでは使えません。
※2022.5.6追記
yunb42さんから回避方法についてコメントをいただきました。認可URLにLINEのURLを指定するのではなくAPI Gateway経由でLambdaを動かすURLを指定する方法のようです。
詳しくはこちらの記事を参考にしてください:
AWS Cognito でLINEログインのボットリンク機能を使う
ボットリンク機能とは
LINEログインの際に、LINE公式アカウントを友だち追加するオプションを表示できる機能です。
詳しくはこちら。
これを利用するには、LINEログインの認可URLにbot_prompt
というクエリパラメータをつける必要があります。
以下のような感じで。
https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id={CHANNEL_ID}&redirect_uri={CALLBACK_URL}&state={STATE}&bot_prompt={BOT_PROMPT}&scope={SCOPE_LIST}
Cognito User PoolのOpenID Connect連携
Cognito User PoolにはOpenID Connectを連携させる機能があります。
LINEログインはOpenID Connect準拠なので、必要な設定をすればUser PoolのIDプロバイダーとして利用することができます。
問題の発覚
私のプロジェクトでは、Amplify JavaScriptライブラリを使っています。
Auth.federatedSignIn
を使ってLINEログインを行います。
さて、ボットリンク機能を使うには、LINEログインの認可エンドポイントに飛ぶとき、URLにbot_prompt
というパラメータをつける必要があります。
「きっと追加のクエリパラメータを渡せるオプションがあるだろう」と甘く見て開発を進めていました。
ですが、ありません。
customStateを渡すことはできますが、それ以外のパラメータを指定することはできません。
そもそも、クライアントアプリから直接LINEログインにリダイレクトするのではなく、一回xxxxxxxxxx.auth.ap-northeast-1.amazoncognito.com
を経由することになります。
なので、LINEログインの認可URL(https://access.line.me/oauth2/v2.1/authorize
)をどのように組み立てるか、クライアントアプリではどうやっても制御できないのです。
Cognitoの設定画面にもそれらしい項目はありません。
StackOverflowにも質問が上がっていました。Auth0では動的にパラメータを設定できるようですね。羨ましい。
こればっかりは、Cognito側でいつかサポートしてもらえることを(あまり期待せずに)待つしかなさそうです。
うーん、困った。
Discussion
同じようなことをしようとしていたので、早い段階でできないことがわかり、助かりました。ありがとうございます。
また、その後色々と検証してみてAPIGatewayとLambdaを利用してた解決策が有効そうでしたので、共有させていただきます(手前味噌で恐縮ですが)。
おお、わざわざ教えていただきありがとうございます!
とても参考になりました。記事でも追記 & タイトル変更いたしました