概要
- KeycloakのIdentity ProviderとしてLINEアカウントを設定します。
- LINEアカウントを使ってKeycloakにログインできるようにします。
設定手順
LINE側の設定
- LINE Developersコンソールにログインします
- https://developers.line.biz/console/
- [LINEアカウントでログイン]と[ビジネスアカウントでログイン]の違い
- https://help2.line.me/business_id/web?lang=ja
- LINE側の設定をする際はどちらでも可能ですが、動作確認の際にはLINEアカウントが必要となるようです。
- 「新規プロバイダー作成」ボタンをクリックしてプロバイダーを作成します。
- プロバイダー名
- 要件を満たす任意の文字列を入力してください。
- プロバイダー名
- チャンネルの作成
- 「LINEログイン」を選択します。
- 以下の情報を入力します。
- チャネルの種類
- LINEログイン
- 任意の文字列
- プロバイダー
- 先ほど作成したプロバイダーを選択します。
- 地域
- 日本
- チャネルアイコン
- 表示したい場合は、任意の画像をアップロードします。
- チャネル名
- 任意の文字列
- チャネル説明
- 任意の文字列
- アプリタイプ
- ウェブアプリ
- メールアドレス
- 任意のメールアドレス
- プライバシーポリシーURL
- 必要でなければ空欄
- サービス利用規約URL
- 必要でなければ空欄
- LINE開発者契約 の内容に同意します
- 内容を確認し、同意します。
- 作成したチャネル > 「LINEログイン」タブ > コールバックURL を設定します。
- http://<KeycloakサーバのFQDN>/auth/realms/<Keycloakのレルム名>/broker/<KeycloakのIdentityProvider名>/endpoint
Keycloak側の設定
- Keycloak管理者でログインします。
- Realm > Identity Providers から、新たな「OpenID Connect v1.0」のプロバイダーを作成します。
- 以下の情報を入力してSaveします。
- Alias
- 任意の文字列
- 例:
line
- Display Name
- 任意の文字列
- 例:
LINEアカウントでログイン
- Sync Mode
- Import (または任意の設定)
- Client ID
- LINE側で発行された「チャネルID」
- チャネル基本設定で確認できます
- Client Secret
- LINE側で発行された「チャネルシークレット」
- Token URL
- https://api.line.me/oauth2/v2.1/token
- Default Scopes
profile%20openid
- 参考: https://developers.line.biz/ja/docs/line-login/integrate-line-login/#scopes
- Use PKCE
- ON
- メモ: LINE(IdP)もKeycloak(SP)も「PKCE」(認可コード横取り攻撃)の対策に対応しています。(Keycloakは13.0.0以降)
- 参考: https://developers.line.biz/ja/docs/line-login/integrate-pkce/#what-is-pkce
- PKCE Method
- S256
- Alias
動作確認
- Keycloakのaccountクライアントを利用してみます。
- http://<KeycloakサーバのFQDN>/auth/realms/<レルム名>/account/
- 右上の「Sign in」をクリックします。
- KeycloakにSign in済の場合は、LINEログインを試すため一旦サインアウトします。
- ログイン画面の「Or sign in with」の下にあるボタンをクリックします。
- LINEアカウントでログインします。
- このとき、「ビジネスアカウント」は使えないようです。
curlでid_tokenの中身を見てみる
事前にLINE側の「コールバックURL」に以下のようなものを入れてみてください。(改行で複数設定できます)
- http://<KeycloakサーバのFQDN>/dummy_endpoint
ブラウザでログインする、リダイレクト先URLのcodeパラメータを確認する
- https://access.line.me/oauth2/v2.1/authorize?scope=profile%20openid&state=teststate&response_type=code&client_id=<LINE側のチャネルID>&redirect_uri=http%3A%2F%2F<KeycloakのFQDN>/dummy_endpoint&nonce=TestNonce
curlでtokenを取得する
curl -v -X POST https://api.line.me/oauth2/v2.1/token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -d 'grant_type=authorization_code' \ -d 'code=<先の手順で取得したcodeを入力>' \ -d 'redirect_uri=<先のURLのredirect_uriパラメータの値>' \ -d 'client_id=<LINE側のチャネルID>' \ -d 'client_secret=<LINE側のシークレット>'
tokenエンドポイントのレスポンス内にあるid_tokenを検証する
curl -v -X POST 'https://api.line.me/oauth2/v2.1/verify' \ -d 'id_token=eyJ0eX〜〜中略〜〜TYs&client_id=<LINE側のチャネルID>'
- 検証結果
{"iss":"https://access.line.me","sub":"UXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","aud":"1656188937","exp":1625655680,"iat":1625652080,"nonce":"TestNonce","amr":["linesso"],"name":"ユーザ名","picture":"https://profile.line-scdn.net/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}
参考
- https://developers.line.biz/ja/docs/line-login/integrate-line-login/
- 閲覧数 1387
コメントを追加