Azure AD x LINE API
そして Auth0
2021/08/31
富士榮 尚寛
@phr_eidentity
自己紹介
• Microsoft MVP for Enterprise Mobility(2010年〜)
• LINE API Expert(第1期 2018年〜)
• Auth0 Ambassador(2018年〜)
• OpenIDファウンデーション・ジャパン/代表理事、KYC WGリーダ
• 米国OpenID Foundation/eKYC and Identity Assurance WG共同議長
• Blog:IdM実験室
• https://idmlab.eidentity.jp
ゴール
• Microsoft 365 系サービスなど Azure AD でログインするサービスに
LINE ID でログインする!(誰得w)
• ユーザの自動作成
• パスワードなしでログイン
悩みどころ①:プロトコルアンマッチ問題
• Azure AD の認証を外部の Identity Provider で行う方法
• カスタムドメイン
• 基本は AD FS 前提で作られてきていた → ws-federation 前提
• エンタープライズ向けなので SAML にも対応している(多くの外部 IdP はこちらを利用)
• Set-MsolDomainAuthentication
• OpenIDConnectDiscoveryEndpoint パラメータはあるだけでなんの役にも立たない
• 一方でLINE Login は OpenID Connect 対応の Identity Provider
悩みどころ②:ユーザ作成と紐付け問題
• Azure AD の ID 連携は Azure AD 上にユーザが存在することが前提
• ライセンス割り当て、アドレス帳同期などを考えると当然だが
• ユーザの識別は Immutable ID 属性(通常は On-prem AD の Object SID を
Base 64 Encode した値や ms-DS-consistencyGUID を利用)で行っている
• 外部 Identity Provider で認証された結果(SAML Assertion など)に入っている
ユーザと Azure AD 上のユーザを Immutable ID で紐づける必要あり
• 当然 LINE Login は On-prem AD の Object SID や ms-DS-
consistencyGUIDは知らない
Azure AD, LINE Login
Microsoft
365 系
サービス
Azure AD LINE Login
Ws-federation, SAML 前提
ユーザ作成が必要
ImmutableIdで紐付け
ImmutableIdで紐付け
Azure AD, LINE Login + Auth0
Microsoft
365 系
サービス
Azure AD LINE Login
ImmutableId
を合わせて
トークン発行
カスタムプロビジョニング
Auth0
OpenID
Connect
LINE Loginしたら動的に
ユーザ作成、ImmutableId
を含むアカウントをAzure
AD上に作成する
ついでにライセンス付与
Ws-fed
Federation(SSO)の前提
• SAML Assertion 内の属性が Azure AD 上のユーザの属性値と一致すること
• Nameid : ImmutableId
• UPN : userPrincipalName
• ImmutableID : ImmutableId
• SAML Assertion のデジタル署名が検証できること(検証に利用する Auth0 の
公開鍵は PowerShell で事前に Azure AD へセットする)
• SAML Assertion の発行者(Issuer)が Auth0 の EntityID と一致すること
• SAML Assertion の受信者(Recipient)が Azure AD の EntityID と一致するこ
と
Provisioning の前提
• 基本は Federation の前提を満たすための Provisioning
• Federation 設定された Azure AD のユーザを作る際は ImmutableId
属性は onPremisesImmutableId という名称となる(同期が前提となって
いる)
Auth0 + Office365の構成
留意事項・バグ(Auth0)
• オンプレ AD とのコネクション設定があることが前提なので、ダミーでもいいので
事前に作っておきましょう
• オンプレ AD とのコネクションを使わない場合、カスタムプロビジョニングのスク
リプト(Rules)を書く必要がありますが、チュートリアルのサンプルは古すぎる
(Azure AD Graph を使っている)ので書き直しましょう
• 今回直したやつはここ
• https://github.com/fujie/memo/blob/main/auth0_o365_provisioning.js
• Rules で ws-federation に乗せる SAML Assertion 上のユーザ属性と Auth0
上のユーザの属性のマッピングにバグ(属性名の typo)があるので、(気持ち
悪いですが)間違えた属性を使いましょう
LINE Loginでパスワードレスログインさせたい
• パスワードレスログインを優先させたい
• QR コードログインを優先
• LINE Login API の initial_amr_display に lineqr を指定する
• メールアドレス / パスワードログインへの切り替えを無効にすることも可能
• switch_amr パラメータ
• Auth0 から LINE Connection への接続時のパラメータをカスタマイズ
Auth0の管理APIでConnectionをカスタマイズ
ついでに友達登録も促す
デモ
• ユーザ名は LINE に設定したメール
アドレスのユーザ名パート+Azure
AD のカスタムドメイン名に設定
• 初回ログインすると、以下を実行
• ユーザ作成(Auth0)
• ユーザ作成(Azure AD)
• ライセンス割り当て(Office 365)
• ライセンス割り当てに時間がかかる
ため、初回のみ15秒程度ウェイト
• LINE ログインは QR コードのみでロ
グインできるように設定
デモ(応用篇)
• Graph API の Pub/Sub や Microsoft
Flow でメールが届いたことを検知
• 検知したらLINE Messaging API の
Webhook をキック
• LINE トークルームへ通知が届く
• リッチメニューから Outlook を起動で
きるようにしておくと シングルサイ
ンオン+メール確認ができる
まとめ
• 標準化って大事(異なるプラットフォームでも API でつながる!)
• 誰得w
• ちなみに私は会社からの災害時の安否確認メールが来たら LINE に通知するよう
にしてます

Azure AD x LINE x Auth0

  • 1.
    Azure AD xLINE API そして Auth0 2021/08/31 富士榮 尚寛 @phr_eidentity
  • 2.
    自己紹介 • Microsoft MVPfor Enterprise Mobility(2010年〜) • LINE API Expert(第1期 2018年〜) • Auth0 Ambassador(2018年〜) • OpenIDファウンデーション・ジャパン/代表理事、KYC WGリーダ • 米国OpenID Foundation/eKYC and Identity Assurance WG共同議長 • Blog:IdM実験室 • https://idmlab.eidentity.jp
  • 3.
    ゴール • Microsoft 365系サービスなど Azure AD でログインするサービスに LINE ID でログインする!(誰得w) • ユーザの自動作成 • パスワードなしでログイン
  • 4.
    悩みどころ①:プロトコルアンマッチ問題 • Azure ADの認証を外部の Identity Provider で行う方法 • カスタムドメイン • 基本は AD FS 前提で作られてきていた → ws-federation 前提 • エンタープライズ向けなので SAML にも対応している(多くの外部 IdP はこちらを利用) • Set-MsolDomainAuthentication • OpenIDConnectDiscoveryEndpoint パラメータはあるだけでなんの役にも立たない • 一方でLINE Login は OpenID Connect 対応の Identity Provider
  • 5.
    悩みどころ②:ユーザ作成と紐付け問題 • Azure ADの ID 連携は Azure AD 上にユーザが存在することが前提 • ライセンス割り当て、アドレス帳同期などを考えると当然だが • ユーザの識別は Immutable ID 属性(通常は On-prem AD の Object SID を Base 64 Encode した値や ms-DS-consistencyGUID を利用)で行っている • 外部 Identity Provider で認証された結果(SAML Assertion など)に入っている ユーザと Azure AD 上のユーザを Immutable ID で紐づける必要あり • 当然 LINE Login は On-prem AD の Object SID や ms-DS- consistencyGUIDは知らない
  • 6.
    Azure AD, LINELogin Microsoft 365 系 サービス Azure AD LINE Login Ws-federation, SAML 前提 ユーザ作成が必要 ImmutableIdで紐付け ImmutableIdで紐付け
  • 7.
    Azure AD, LINELogin + Auth0 Microsoft 365 系 サービス Azure AD LINE Login ImmutableId を合わせて トークン発行 カスタムプロビジョニング Auth0 OpenID Connect LINE Loginしたら動的に ユーザ作成、ImmutableId を含むアカウントをAzure AD上に作成する ついでにライセンス付与 Ws-fed
  • 8.
    Federation(SSO)の前提 • SAML Assertion内の属性が Azure AD 上のユーザの属性値と一致すること • Nameid : ImmutableId • UPN : userPrincipalName • ImmutableID : ImmutableId • SAML Assertion のデジタル署名が検証できること(検証に利用する Auth0 の 公開鍵は PowerShell で事前に Azure AD へセットする) • SAML Assertion の発行者(Issuer)が Auth0 の EntityID と一致すること • SAML Assertion の受信者(Recipient)が Azure AD の EntityID と一致するこ と
  • 9.
    Provisioning の前提 • 基本はFederation の前提を満たすための Provisioning • Federation 設定された Azure AD のユーザを作る際は ImmutableId 属性は onPremisesImmutableId という名称となる(同期が前提となって いる)
  • 10.
  • 11.
    留意事項・バグ(Auth0) • オンプレ ADとのコネクション設定があることが前提なので、ダミーでもいいので 事前に作っておきましょう • オンプレ AD とのコネクションを使わない場合、カスタムプロビジョニングのスク リプト(Rules)を書く必要がありますが、チュートリアルのサンプルは古すぎる (Azure AD Graph を使っている)ので書き直しましょう • 今回直したやつはここ • https://github.com/fujie/memo/blob/main/auth0_o365_provisioning.js • Rules で ws-federation に乗せる SAML Assertion 上のユーザ属性と Auth0 上のユーザの属性のマッピングにバグ(属性名の typo)があるので、(気持ち 悪いですが)間違えた属性を使いましょう
  • 12.
    LINE Loginでパスワードレスログインさせたい • パスワードレスログインを優先させたい •QR コードログインを優先 • LINE Login API の initial_amr_display に lineqr を指定する • メールアドレス / パスワードログインへの切り替えを無効にすることも可能 • switch_amr パラメータ • Auth0 から LINE Connection への接続時のパラメータをカスタマイズ
  • 13.
  • 14.
    デモ • ユーザ名は LINEに設定したメール アドレスのユーザ名パート+Azure AD のカスタムドメイン名に設定 • 初回ログインすると、以下を実行 • ユーザ作成(Auth0) • ユーザ作成(Azure AD) • ライセンス割り当て(Office 365) • ライセンス割り当てに時間がかかる ため、初回のみ15秒程度ウェイト • LINE ログインは QR コードのみでロ グインできるように設定
  • 15.
    デモ(応用篇) • Graph APIの Pub/Sub や Microsoft Flow でメールが届いたことを検知 • 検知したらLINE Messaging API の Webhook をキック • LINE トークルームへ通知が届く • リッチメニューから Outlook を起動で きるようにしておくと シングルサイ ンオン+メール確認ができる
  • 16.
    まとめ • 標準化って大事(異なるプラットフォームでも APIでつながる!) • 誰得w • ちなみに私は会社からの災害時の安否確認メールが来たら LINE に通知するよう にしてます