KeycloakとLINEアカウントの連携

  •  
 
ホス2021年7月8日 - 11:33 に投稿

概要

  • KeycloakのIdentity ProviderとしてLINEアカウントを設定します。
  • LINEアカウントを使ってKeycloakにログインできるようにします。

設定手順

LINE側の設定

  1. LINE Developersコンソールにログインします
    • https://developers.line.biz/console/
    • [LINEアカウントでログイン]と[ビジネスアカウントでログイン]の違い
      • https://help2.line.me/business_id/web?lang=ja
      • LINE側の設定をする際はどちらでも可能ですが、動作確認の際にはLINEアカウントが必要となるようです。
  2. 「新規プロバイダー作成」ボタンをクリックしてプロバイダーを作成します。
    • プロバイダー名
      • 要件を満たす任意の文字列を入力してください。
  3. チャンネルの作成
    1. 「LINEログイン」を選択します。
    2. 以下の情報を入力します。
    • チャネルの種類
      • LINEログイン
      • 任意の文字列
    • プロバイダー
      • 先ほど作成したプロバイダーを選択します。
    • 地域
      • 日本
    • チャネルアイコン
      • 表示したい場合は、任意の画像をアップロードします。
    • チャネル名
      • 任意の文字列
    • チャネル説明
      • 任意の文字列
    • アプリタイプ
      • ウェブアプリ
    • メールアドレス
      • 任意のメールアドレス
    • プライバシーポリシーURL
      • 必要でなければ空欄
    • サービス利用規約URL
      • 必要でなければ空欄
    • LINE開発者契約 の内容に同意します
      • 内容を確認し、同意します。
  4. 作成したチャネル > 「LINEログイン」タブ > コールバックURL を設定します。
    • http://<KeycloakサーバのFQDN>/auth/realms/<Keycloakのレルム名>/broker/<KeycloakのIdentityProvider名>/endpoint

Keycloak側の設定

  1. Keycloak管理者でログインします。
  2. Realm > Identity Providers から、新たな「OpenID Connect v1.0」のプロバイダーを作成します。
  3. 以下の情報を入力してSaveします。
    • Alias
      • 任意の文字列
      • 例: line
    • Display Name
      • 任意の文字列
      • 例: LINEアカウントでログイン
    • Sync Mode
      • Import (または任意の設定)
    • Client 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

動作確認

  1. Keycloakのaccountクライアントを利用してみます。
    • http://<KeycloakサーバのFQDN>/auth/realms/<レルム名>/account/
  2. 右上の「Sign in」をクリックします。
    • KeycloakにSign in済の場合は、LINEログインを試すため一旦サインアウトします。
  3. ログイン画面の「Or sign in with」の下にあるボタンをクリックします。
  4. LINEアカウントでログインします。
    • このとき、「ビジネスアカウント」は使えないようです。

curlでid_tokenの中身を見てみる

  1. 事前にLINE側の「コールバックURL」に以下のようなものを入れてみてください。(改行で複数設定できます)

    • http://<KeycloakサーバのFQDN>/dummy_endpoint
  2. ブラウザでログインする、リダイレクト先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
  3. 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側のシークレット>'
    
  4. tokenエンドポイントのレスポンス内にあるid_tokenを検証する

    curl -v -X POST 'https://api.line.me/oauth2/v2.1/verify' \
     -d 'id_token=eyJ0eX〜〜中略〜〜TYs&client_id=<LINE側のチャネルID>'
    
  5. 検証結果 {"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/

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
CAPTCHA
この質問はあなたが人間の訪問者であるかどうかをテストし、自動化されたスパム送信を防ぐためのものです。