Azure AD B2Cでは、OpenID ConnectやSAML等のプロトコルで外部IDプロバイダーと連携することにより、FacebookやTwitter等のソーシャルアカウントでのログインが可能です。
参考:https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/add-identity-provider
この記事ではOpenID Connectを使い、LINEアカウントでAD B2Cにログインする方法をご紹介します。
Open ID Connectの設定(LINE)
参考:https://developers.line.biz/ja/docs/line-login/integrate-line-login/
プロバイダーおよびチャネルの作成
-
LINE Developers Consoleにアクセスし、新規プロバイダーを作成します。
-
チャネル名や管理者のメールアドレスなどの情報を入力し、作成します。
-
チャネル作成後、基本設定画面から以下の値を控えておきます。
コールバックURLの作成
- LINEログイン設定タブを表示し、「コールバックURL」に
https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/oauth2/authresp
を設定します。
チャネルを公開する
チャネルは、デフォルトでは非公開の状態となっています。
非公開の場合、LINEログインできるユーザーはチャネルに招待済みのユーザーのみに限定されるため、他のLINEアカウントでログインするにはチャネルを公開する必要があります。
参考:https://developers.line.biz/ja/docs/line-login/getting-started/#step-6-publish-channel
チャネルの設定画面から、「非公開」のステータスを選択することで公開ができます。
※チャネルは公開から非公開には戻せないため、もし再度非公開にする場合はチャネルを作り直す必要があります。
【補足】メールアドレスの取得権限の申請
LINEでは、Google等同様にログインユーザーのメールアドレスを取得し、B2Cに連携することが可能です。
ただしドキュメント内の以下の引用の通り、メールアドレスの取得にはメールアドレスの取得・利用について記載された文面を別途用意する必要があるとのことですので、今回は省略します。
申請条件に同意して、メールアドレスの取得と利用についてユーザーに提示する文面のスクリーンショットをアップロードします。
カスタムIDPの設定(AD B2C)
B2Cの管理画面でLINEログインの設定を行います。
汎用OpenId Connectの設定を参考に、ユーザーフローおよびカスタムポリシーでの設定をご紹介します。
ユーザーフロー
-
B2Cの管理画面のメニューから「IDプロバイダー」を選択し、「新しいOpen ID Connectプロバイダー」を選択します。
-
設定画面で以下の情報を入力し保存します。
- 名前:
LINE
(任意の名前で問題無し) - メタデータURL:
https://access.line.me/.well-known/openid-configuration
- クライアントID:プロバイダーおよびチャネルの作成で生成されたチャネルID
- クライアントシークレット:プロバイダーおよびチャネルの作成で生成されたチャネルシークレット
- スコープ:
openid profile
- 応答の種類:
code
- 応答モード:
form_post
- ユーザーID:
sub
- 表示名:
name
- 名前:
カスタムポリシー
前提として、カスタムポリシーは下記URLの「SocialAccounts」のポリシーをベースとして説明します。
※下記のポリシーはFacebookログインを前提としておりますので、そちらの設定はあらかじめコメントアウトしてください。
-
B2C管理画面のポリシーキー設定から、以下のキーを追加します。
- オプション:手動
- 名前:
LINESecret
- シークレット:プロバイダーおよびチャネルの作成で生成されたチャネルシークレット
- アクティブ化する日を設定する:未チェック
- 有効期限を設定する:未チェック
- キー使用法:署名
-
カスタムポリシー
TrustFrameworkBase.xml
のClaimsProviders
配下に、LINEのIDプロバイダーを追加します。-
{クライアントID}
には、プロバイダーおよびチャネルの作成で生成されたチャネルIDを設定します。 -
{シークレットキー名}
には、1.で追加したポリシーキー名を設定します。
<ClaimsProvider> <Domain>line.me</Domain> <DisplayName>Login with LINE</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="LINE-OpenIdConnect"> <DisplayName>LINE</DisplayName> <Description>Login with your LINE account</Description> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://access.line.me/.well-known/openid-configuration</Item> <Item Key="client_id">{クライアントID}</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="{シークレットキー名}" /> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub"/> <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/> <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name" /> <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="family_name" /> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" /> <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="line.me" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" /> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" /> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" /> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
-
-
カスタムポリシー
TrustFrameworkBase.xml
のUserJourney
にIDプロバイダーを設定します。-
UserJourneys配下の、
SignUpOrSignIn
のうち、Step1のClaimsProviderSelections
、Step2のClaimsExchanges
配下に、IDプロバイダーの設定を追加します。<UserJourney Id="SignUpOrSignIn"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="LINEExchange" /> ... </ClaimsProviderSelections> ... </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> ... <ClaimsExchanges> <ClaimsExchange Id="LINEExchange" TechnicalProfileReferenceId="LINE-OpenIdConnect" /> ... </ClaimsExchanges> </OrchestrationStep> </OrchestrationSteps> ... </UserJourney>
-
-
以下の順にカスタムポリシーをアップロードします。
- TrustFrameworkBase.xml
- TrustFrameworkLocalization.xml
- TrustFrameworkExtensions.xml
- SignUpOrSignin.xml
動作確認
これでLINEログインの設定は完了です。
ポリシーを実行してみます。
-
初回ログイン時はB2C側の画面に遷移し、ユーザー情報の入力画面になります。
- 「ユーザー名」の箇所は、LINEのユーザー名になっていることがわかります。
まとめ
今回はOpenID Connectを利用し、LINEアカウントでAzure AD B2Cにログインする方法をご紹介しました。
また、B2C側では汎用OpenID Connectの設定を行っているため、OpenID Connectがサポートされている他の外部IDプロバイダーでも同様の方法で連携が可能です。