Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Azure AD で管理画面のユーザーと権限管理

Azure AD で管理画面のユーザーと権限管理

026250b06da3f29c310c33b0aaef1126?s=128

Atsushi Nakagawa

November 06, 2020
Tweet

Other Decks in Technology

Transcript

  1. 管理画面の利用者と権限管理を Azure AD で


  2. 自己紹介 中川 敦
 エンジニア
 
 マネーフォワード歴: 2014 年 ~ 


    (現在:アカウントアグリゲーション部) 
 
 • 得意な言語:C, Java, Python, Bash, JS 
 
 趣味:PC ゲーム。今ハマっているゲーム: 
 • Apex Legends
 • Hades(ハデス)

  3. 目次 1. Azure AD を使って利用者と権限の管理 
 2. 利用者を区別する識別子について 
 3.

    利用者の識別子から利用者情報の取得 
 4. Single Logout について 
 

  4. Azure AD を使って利用者と権限 の管理
 
 (題材:アグリ管理ウェブ)


  5. アグリ管理ウェブ
 • 登録口座毎の取得記録(取得日時、取得結果、など) 
 • 取得エラーの詳細な理由 
 
 • β

    機能を(一部ユーザーに)開放 
 • 連携先の(一時)緊急停止 
 

  6. アグリ管理ウェブの構成 
 アグリ管理ウェブ
 社内利用者
 (カスタマーサポート、 
 アグリゲーション部の担当) 
 の 連携機能のデータベース

  7. 利用者管理と利用権限
 利用者管理:
 • 利用者のメールアドレス、パスワード(ハッシュ) 
 
 権限管理:
 • 登録口座毎の取得記録(取得日時、取得結果、など) ←

    CS /アグリが利用 
 • 取得エラーの詳細な理由 ← CS /アグリが利用 
 
 • β 機能を(一部ユーザーに)開放 ← アグリが利用
 • アグリゲーション機能の(一時)停止 ← アグリが利用
 

  8. アグリ管理ウェブの構成(+利用者管理) アグリ管理ウェブ
 社内利用者
 (カスタマーサポート、 
 アグリゲーション部の担当) 
 の 連携機能のデータベース 


    利用者管理:
 ・メールアドレス
 ・パスワード
 ・権限(複数)

  9. アグリ管理ウェブの構成(+利用者管理) アグリ管理ウェブ
 社内利用者
 (カスタマーサポート、 
 アグリゲーション部の担当) 
 の 連携機能のデータベース 


    利用者管理:
 ・メールアドレス
 ・パスワード
 ・権限(複数)
 → Microsoft Azure AD にて 

  10. Azure Active Directory (Azure AD) を使うことの利点
 弊社では 「アグリ管理ウェブ」より前から Azure AD

    を使用していた(主に SSO 用) 
 
 • アグリ管理ウェブの機能削減: 
 ◦ 利用者毎のメールアドレスとパスワードの管理が不要 
 ◦ 別途権限管理が不要 
 
 • 代わりに Azure AD の機能を使用: 
 ◦ SSO でログイン
 ◦ Azure AD では利用者毎に「ロール」を設定可能(複数ロール可能) 
 

  11. Azure AD の利用者とロールの設定 UI 
 「アグリ管理ウェブ」用の設定 
 利用者名(グループ管理も可能) 
 設定ロール(複数可能)

  12. 「アグリ管理ウェブ」をブラウザーで開く → (セッションが無ければ) SSO にリダイレクト 
 
 Azure AD の

    SSO を使ったログインイメージ (1/3)

  13. → SSO (OAuth 2.0 authorization code flow) で使うリンクにリダイレクトされる: 
 https://login.microsoftonline.com/abcdef12-3456-7890-abcd-ef1234567890/oauth2/v2.0/authorize?scope=openid+profile+...

    &redirect_uri=https://aggre-aweb.example/sso Azure AD の SSO を使ったログインイメージ (2/3)

  14. → ユーザーが口座を選ぶと「code」が発行され「redirect_uri」で指定した URL にブラウザーが戻って来る 
 https://aggre-aweb.example/sso?code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq… 
 Azure AD の

    SSO を使ったログインイメージ (3/3)
 テクニカル: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow
 POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token HTTP/1.1 client_id=...&client_secret=...&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq... { "access_token": "...", "expires_in": 3599, "refresh_token": "...", "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD...", } • アグリ管理ウェブ側では貰った「code」を用いてトークンを取得: 
 • 応答
 
 jwt 型式の JSON に利用者の名前、ロール(roles)情報など 

  15. 1. Azure Active Directory にアプリケーションを登録 
 1. サービス名を決めて Active Directory

    の管理画面より新規アプリケーションを追加 
 2. Redirect URI を設定(redirect_uri で許可する URL) 
 3. Logout URL を設定 (Single Logout 時に呼ばれる URL) 
 4. ウェブサービス側で使う client secret を発行 
 5. マニフェストファイルを編集してロールを定義 
 6. 利用者とロールを必要に応じて設定 
 
 2. ウェブサービス側の開発 
 1. ログイン用に Azure にリダイレクトする実装 
 2. 貰った code からログインを完了させる URL 
 i. Azure を照会して code からトークンを取得 
 ii. ロールなど利用者情報をセッション記録 
 3. Logout URL の実装(オプショナル) 
 Azure AD を使った SSO の開発の大まかな流れ
 "appRoles": [ { "allowedMemberTypes": ["User"], "description": "CS で業務を行う担当者のためのロールです ", "origin": "Application", ... "value": "CS" }, { "allowedMemberTypes": ["User"], "description": "アグリの業務を行うエンジニアのためのロールです ", "origin": "Application", ... "value": "AGGRE" }, ... 例

  16. 利用者を区別する識別子につい て

  17. アグリ管理ウェブの構成 アグリ管理ウェブ
 社内利用者
 (カスタマーサポート、 
 アグリゲーション部の担当) 
 の 連携機能のデータベース 


    利用者管理:
 ・メールアドレス
 ・パスワード
 ・権限(複数)
 → Microsoft Azure AD にて 

  18. アグリ管理ウェブの構成(+操作の申請&承認) アグリ管理ウェブ
 社内利用者
 (カスタマーサポート、 
 アグリゲーション部の担当) 
 の 連携機能のデータベース 


    利用者管理:
 ・メールアドレス
 ・パスワード
 ・権限(複数)
 → Microsoft Azure AD にて 
 操作の申請&承認情報 

  19. • 申請者を記録する必要がある 
 • 承認者には承認時に申請者が誰なのか見れるようになっている必要がある 
 • 後から確認できるように申請者と承認者は記録に残す必要がある 
 (危険な)操作の申請と承認機能


  20. • どちらも利用者をユニークに識別 
 • ロール情報と同じように id_token の JSON 内に存在 


    
 • sub: Azure AD に登録した一つのアプリケーション内でのみユニーク 
 ◦ アプリケーションを再登録 → sub はゴミ化 
 ◦ アプリケーションとデータストアのライフサイクルが同じであれば問題ない 
 
 • oid: アプリケーションを跨いでもユニーク 
 ◦ アプリケーションを再登録 → oid は変わらない 
 ◦ scope=profile が必要。無ければ id_token に存在しない 
 利用者の識別子: Azure AD と sub と oid の違い

  21. 利用者の識別子から利用者情 報の取得


  22. Microsoft Graph のエンドポイントよりユーザー情報を照会: 
 • ログイン時に得た access_token を使う必要がある 
 


    
 
 
 
 応答:
 
 
 sub/oid を用いて利用者を取得
 GET https://graph.microsoft.com/v1.0/{tenant}/users/{oid} Authentication: Bearer ... { "displayName": "山田 太郎", "givenName": "givenName-value", "jobTitle": "jobTitle-value", "mail": "mail-value", "mobilePhone": "mobilePhone-value", ... "id": "id-value" }
  23. Single Logout について


  24. Logout URI → ログアウトを実施 
 • Front-Channel → アグリ管理ウェブで実装 


    • Back-Channel?
 Single Logout: 一括ログアウトについて

  25. Q & A