📚

Amazon CognitoではLINEログインのボットリンク機能は…使えません!(回避方法あり)

2021/03/28に公開
2

できないことが早期に分かることも開発では必要だと思うので、あえて書いておきます。

伝えたいことは表題通りです。
LINEログインのボットリンク機能は、 Amazon CognitoのCognito User Poolでは使えません

※2022.5.6追記
yunb42さんから回避方法についてコメントをいただきました。認可URLにLINEのURLを指定するのではなくAPI Gateway経由でLambdaを動かすURLを指定する方法のようです。

詳しくはこちらの記事を参考にしてください:
AWS Cognito でLINEログインのボットリンク機能を使う

ボットリンク機能とは

LINEログインの際に、LINE公式アカウントを友だち追加するオプションを表示できる機能です。
詳しくはこちら。
https://developers.line.biz/ja/docs/line-login/link-a-bot/

これを利用するには、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プロバイダーとして利用することができます。

Cognito設定画面

問題の発覚

私のプロジェクトでは、Amplify JavaScriptライブラリを使っています。
Auth.federatedSignInを使ってLINEログインを行います。

さて、ボットリンク機能を使うには、LINEログインの認可エンドポイントに飛ぶとき、URLにbot_promptというパラメータをつける必要があります。

「きっと追加のクエリパラメータを渡せるオプションがあるだろう」と甘く見て開発を進めていました。

ですが、ありません。

https://aws-amplify.github.io/amplify-js/api/classes/authclass.html#federatedsignin

customStateを渡すことはできますが、それ以外のパラメータを指定することはできません。

そもそも、クライアントアプリから直接LINEログインにリダイレクトするのではなく、一回xxxxxxxxxx.auth.ap-northeast-1.amazoncognito.comを経由することになります。

なので、LINEログインの認可URL(https://access.line.me/oauth2/v2.1/authorize)をどのように組み立てるか、クライアントアプリではどうやっても制御できないのです。

Cognitoの設定画面にもそれらしい項目はありません。

StackOverflowにも質問が上がっていました。Auth0では動的にパラメータを設定できるようですね。羨ましい。

https://stackoverflow.com/questions/60536204/aws-cognito-pass-additional-parameters-to-oidc-idp

こればっかりは、Cognito側でいつかサポートしてもらえることを(あまり期待せずに)待つしかなさそうです。

うーん、困った。

Discussion

yunb42yunb42

同じようなことをしようとしていたので、早い段階でできないことがわかり、助かりました。ありがとうございます。

また、その後色々と検証してみてAPIGatewayとLambdaを利用してた解決策が有効そうでしたので、共有させていただきます(手前味噌で恐縮ですが)。
https://qiita.com/eup42/items/7d999236b5b84760cead

kecykecy

おお、わざわざ教えていただきありがとうございます!
とても参考になりました。記事でも追記 & タイトル変更いたしました