Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Access Management (CIAM) の設計と実装

1,014 views

Published on

de:code 2019 で使用した資料です。
Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Access Management (CIAM) の 設計と実装

(履歴)
1.1 20190531 Typoをちょっとだけ修正しました。

Published in: Technology
  • ACCESS that WEBSITE Over for All Ebooks (Unlimited) ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... DOWNLOAD FULL EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Download or read that Ebooks here ... ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Doc Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

V1.1 CD03 Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Access Management (CIAM) の設計と実装

  1. 1. Azure Active Directory B2C/B2B コラボレーションによる Customer Identity and Access Management (CIAM) の 設計と実装 CD03 ANNO Junichi 安納 順一 Microsoft Corporation Commercial Software Engineering
  2. 2. Agenda • Azure Active Directory B2B コラボレーション • Azure Active Directory B2C • Identity Experience Framework による複雑な認証ワークフローの 実装
  3. 3. Identity is control plane
  4. 4. 2 種類の Identity 両方のアイデンティティを管理し、 リソースへのアクセスをコントロールする必要がある
  5. 5. アイデンティティを連携させる 3 つの方法
  6. 6. Azure AD B2B Collaboration
  7. 7. Azure AD B2B Collaboration • Azure Active Directory テナントの無償機能の1つ • B2B シナリオでの利用を想定している • 組織と個人を紐づける仕組み • 外部 Azure AD ユーザー • Microsoft Account ユーザー • Google アカウントユーザー(Google 側で設定が必要) • その他のユーザー • ワンタイムパスコード(OTP)を使用してログイン • Googleアカウントの場合も事前設定が無い場合にはこの方式が採 用される • 招待されたユーザーはゲストとして扱われるが、各種ロールを与える ことは可能
  8. 8. B2B Collaboration の流れ hogehoge@hoge.com hogehoge@hoge.com をゲストとして登録
  9. 9. (参考)OTPユーザーについて https://docs.microsoft.com/ja-jp/azure/active-directory/b2b/one-time-passcode
  10. 10. B2B 利用の注意点 • 招待できる権限に注意 • 全体管理者 • ゲスト招待元ロール • 「外部コラボレーションの設定」画面 で指定されたユーザー • AAD 有償ライセンスは”基本的に”「招待 元」のライセンスが適用される • 1 ライセンスあたり 5 ゲストユーザー が利用可能 • ただしゲストに対して明に割り当ては できないため「条件付きアクセス」を 使用する
  11. 11. 条件付きアクセスを使用してゲストにMFAを強制する
  12. 12. 「招待」の拡張 – Graph API Invitation Manager https://docs.microsoft.com/en-us/graph/api/resources/invitation?view=graph-rest-1.0 hogehoge@hoge.com hogehoge@hoge.com をゲストとして登録 https://github.com/Azure/active-directory-dotnet-graphapi-b2bportal-web
  13. 13. 「招待」の拡張 – Graph API Invitation Manager https://docs.microsoft.com/en-us/graph/api/resources/invitation?view=graph-rest-1.0 開発可能 https://github.com/Azure/active-directory-dotnet-graphapi-b2bportal-web • 特定の組織(ドメイン)は自動処理する • インビテーションの文面をカスタマイズする なんてことも可能
  14. 14. Azure AD B2C
  15. 15. Azure AD B2C • ディレクトリサービス • カスタマーとのコマースシナリオでの利用を想定している • 複数のアイデンティティプロバイダーを AAD B2C に紐づける仕組み • 外部システムと連携するなどの、複雑なログオンプロセスを実装可能 SAML 2.0
  16. 16. Azure AD B2C って実はこんな感じ… https://extensions.cpim.windows.net b2c-extensions-app Used by AADB2C for storing user data. Azure AD B2C 管理コンソール
  17. 17. 外部 Azure AD テナント (Public Preview) https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/active-directory-b2c-setup-oidc-azure-active-directory Company A Company B
  18. 18. Idp キーで認証基盤 を判定可能 Azure AD B2C から発行されるトークン例
  19. 19. Azure AD B2C から発行されるトークン例
  20. 20. ちなみにお値段は...
  21. 21. Policy = User flow
  22. 22. Policy-based model ー サインアップの例 facebook google MS Account User id password surname email givenname address phone OK WELCOME JUNICHI ! PLACE A NEW ORDER REVIEW EXISTING ORDER IT’S APPLE SEASON THE MOST POPULAR VARIETIES ARE
  23. 23. 認証要求時の URL 例 https://junichiab2c.b2clogin.com/junichiab2c.onmicrosoft.com/oauth2/v2.0/authorize? p=B2C_1_UF_SignUpOrSignIn& client_id=8cb77ced-3771-4069-8217-2df2e6b47cda& redirect_uri=https%3A%2F%2Fjwt.ms& nonce=defaultNonce& scope=openid& response_type=id_token& prompt=login& ui=_locales=ja https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/active-directory-b2c-reference-oidc
  24. 24. • • •
  25. 25. • 第三者と共有される情報に明示的にオプトイン • 自分のアイデンティティに関連付けられたすべて のデータにアクセスする権利 • 自分のアイデンティティに関連するすべてのデー タの削除を要求する権利 • 違反通知の義務 → Azure Security Center • データ保護管理者を選任する義務 • 未成年者のサービス利用に対する保護者の同意 https://aka.ms/AADB2CandGDPR
  26. 26. https://docs.microsoft.com/ja-jp/azure/active-directory-b2c/basic-age-gating まずはここをクリック
  27. 27. V2 フロータイプ(プレビュー)
  28. 28. https://docs.microsoft.com/ja-jp/graph/api/resources/user?view=graph-rest-1.0#legal-age-group-property-definitions
  29. 29. 主なSNSの利用率(2016年 全体・性年代別) (出典)総務省情報通信政策研究所「情報通信メディアの利用時間と情報行動に関する調査」 http://www.soumu.go.jp/johotsusintokei/whitepaper/ja/h29/html/nc111130.html
  30. 30. SNS での本人情報の信頼性は? (出典)総務省「社会課題解決のための新たなICTサービス・技術への人々の意識に関する調査研究」(平成27年)
  31. 31. Identity Experience Framework(IEF) xxxx 独自のワークフロー
  32. 32. マイナンバーカード連携~どのように実装するのか… お勧めのライブラリ • OSS Tech 社製 LibJeID for Android https://www.osstech.co.jp/product/libjeid
  33. 33. 今回はこんな方法でテスト実装してみました https://www.osstech.co.jp/company/staff/hamano
  34. 34. デモ環境のアーキテクチャ VS Code Identity Experience Framework
  35. 35. PowerShell on Azure Functions using namespace System.Net using namespace System.Text param($Request, $TriggerMetadata) # Write to the Azure Functions log stream. Write-Host "PowerShell HTTP trigger function processed a request." Remove-Item .result.txt Start-Process ./myna.exe -ArgumentList "card attr" -NoNewWindow -RedirectStandardInput "inputparam.txt" -RedirectStandardOutput "./result.txt" -PassThru -wait $result = Get-Content "c:tmpdecode_demoresult.txt" -Encoding UTF8 $json = $result | ConvertTo-Json $hash = $json | ConvertFrom-Json $birthday = $hash[3].value.split(":")[1] [datetime]$birthday = $birthday.Substring(1,4) + "/" + $birthday.Substring(5,2) + "/" + $birthday.Substring(7,2) $now = Get-Date $age = ($now - $birthday).TotalDays / 365 $body = "{""age"": ""$age""}" # Associate values to output bindings by calling 'Push-OutputBinding'. Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ headers = @{'content-type' = 'application/json’} StatusCode = [HttpStatusCode]::OK Body = $body })
  36. 36. Azure Function を実行し ngrok.exe で API を外部に公開
  37. 37. Logic App の作成 Ngrok で外部公開したURL 前のステップの実行結果(BODY)
  38. 38. カスタムポリシー作成の準備 ~ ポリシーキーの作成 https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-get-started-custom
  39. 39. Cont. ~
  40. 40. Cont. VS Code 用 Extension のインストール
  41. 41. Cont. ~ AAD に Identity Experience Framework(IEF) アプリを登録する IEF IEF Proxy Azure AD B2C のアプリケーション登録ではなく、Azure Active Directory 本体に登録する https://<tenant>.b2clogin.com/<tenant>.onmicrosoft.com を使用する
  42. 42. カスタムポリシーを作成する ~ サインインとサインアップ用 https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack/archive/master.zip <ClaimsProvider> <DisplayName>Local Account SignIn</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="login-NonInteractive"> <Metadata> <Item Key="client_id">ProxyIdentityExperienceFrameworkAppId</Item> <Item Key="IdTokenAudience">IdentityExperienceFrameworkAppId</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="client_id" DefaultValue="ProxyIdentityExperienceFrameworkAppId" /> <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="IdentityExperienceFrameworkAppId" /> </InputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
  43. 43. Cont. <BuildingBlocks> <ContentDefinitions> <ContentDefinition Id="api.signuporsignin"> <LoadUri>https://BlobAccount.blob.core.windows.net/b2c/unified.html</LoadUri> </ContentDefinition> <ContentDefinition Id="api.localaccountsignup"> <LoadUri>https://BlobAccount.blob.core.windows.net/b2c/unified.html</LoadUri> </ContentDefinition> </ContentDefinitions> </BuildingBlocks>
  44. 44. REST API を追加する TrustFrameworkExtensions.xml <BuildingBlocks> ノードに、以下の <ClaimsSchema> 要素を追加する <BuildingBlocks> <ClaimsSchema> <ClaimType Id="age"> <DisplayName>age</DisplayName> <DataType>string</DataType> <UserHelpText>age</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType> </ClaimsSchema> </BuildingBlocks> <ClaimsProviders> ノードに、以下の <ClaimsProvider> 要素を追加する <DisplayName>REST APIs</DisplayName> <TechnicalProfiles> </TechnicalProfile> </ClaimsProvider>
  45. 45. Cont. <TechnicalProfiles> ノードに、1つ目の以下の <TechnicalProfile> 要素を追加する <TechnicalProfile Id="REST-API-SignUp"> <DisplayName>Get Age from MyNumber Card</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/> <Metadata> <Item Key="ServiceUrl">https://prod- 26.japaneast.logic.azure.com:443/workflows/f81b5efa1ba8475ebde49330162c3d4f/triggers/manual/p aths/invoke?api-version=2016-10- 01&amp;sp=%2Ftriggers%2Fmanual%2Frun&amp;sv=1.0&amp;sig=Hqh2E6CjCvyELskUPfn1w3ftX7X45C_Zr- 87ptOkan4</Item> <Item Key="AuthenticationType">None</Item> <Item Key="SendClaimsIn">Body</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="age" PartnerClaimType="age"/> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop"/> </TechnicalProfile> Logic App の URL を指定する
  46. 46. Cont. <TechnicalProfiles> ノードに、2つ目の <TechnicalProfile> 要素を追加する <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="age" PartnerClaimType="age" /> </OutputClaims> <ValidationTechnicalProfiles> <ValidationTechnicalProfile ReferenceId="REST-API-SignUp" /> </ValidationTechnicalProfiles> </TechnicalProfile>
  47. 47. Cont. <UserJourneys> <UserJourney Id="ProfileEdit"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsProviderSelection" ContentDefinitionReferenceId="api.idpselections"> <ClaimsProviderSelections> <ClaimsProviderSelection TargetClaimsExchangeId="FacebookExchange" /> <ClaimsProviderSelection TargetClaimsExchangeId="LocalAccountSigninEmailExchange" /> </ClaimsProviderSelections> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="FacebookExchange" TechnicalProfileReferenceId="Facebook-OAUTH" /> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted- LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>authenticationSource</Value> <Value>localAccountAuthentication</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="AADUserRead" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId" /> </ClaimsExchanges> </OrchestrationStep>
  48. 48. <OrchestrationStep Order="4" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimEquals" ExecuteActionsIf="true"> <Value>authenticationSource</Value> <Value>socialIdpAuthentication</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="5" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="B2CUserProfileUpdateExchange" TechnicalProfileReferenceId="SelfAsserted-ProfileUpdate" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="6" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="age" TechnicalProfileReferenceId="REST-API-SignUp" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> <ClientDefinition ReferenceId="DefaultWeb" /> </UserJourney> </UserJourneys>
  49. 49. Cont. SignUpOrSignIn.xml <TechnicalProfile Id=“PolicyProfile”> の <OutputClaims> ノードに、以下の OutputClaim を追加する。 <OutputClaim ClaimTypeReferenceId="age" />
  50. 50. カスタムポリシーをアップロードする 依存関係があるので、初回は以下の順番でアップロードする • TrustFrameworkBase.xml • TrustFrameworkExtensions.xml • SignUpOrSignin.xml • ProfileEdit.xml • PasswordReset.xml
  51. 51. 実行テスト
  52. 52. Azure AD B2C その他の機能 preview • リソース所有者パスワード資格情報 (Resource Owner Password Credentials Grant Type, ROPC) フロー (Preview)  RFC6749 に対応  あくまでもレガシーアプリの移行用  詳細は Nat Sakimura さんのBlog を参照 https://ritou.hatenablog.com/entry/2018/09/26/113512 Preview
  53. 53. ページのカスタマイズ
  54. 54. (参考) OpenID Connect プロバイダーを追加したら CSS にも追加 #Pharaojp_AAD { background-color: rgb(48, 163, 225); background-image: url("https://aadb2ctraining.blob.core.windows.net/aadb2ctraining/activ edirectory.png"); background-repeat: no-repeat; background-size: 50px; padding-left: 55px; } #Pharaojp_AAD:hover { background-color: rgb(48, 163, 225); }
  55. 55. 多言語の設定 https://<tenant>.b2clogin.com/<tenant>.on microsoft.com/oauth2/v2.0/authorize ui_locales=ja
  56. 56. cont. ui-locales の値に応じて ロケールが挿入される カスタムポリシーを使用する 場合、ロケールの識別名は規 定では以下の通りとなること に注意 ・en → en-US ・ja → ja-JP 等 大文字小文字を判別すること に注意。ただし、ui-locals を 指定すればenやjaでもOK
  57. 57. Term of Use の合意用チェックボックスを追加する <ClaimType Id="TnCs"> <DisplayName>Terms of Service Consent</DisplayName> <DataType>string</DataType> <UserHelpText>I agree to the PHARAOJP terms of service.</UserHelpText> <UserInputType>CheckboxMultiSelect</UserInputType> <Restriction> <Enumeration Text="I agree to the PHARAOJP terms of service." Value="5/30/2019" SelectByDefault="false" /> </Restriction> </ClaimType> <TechnicalProfile Id=“LocalAccountSignUpWithLogonEmail”> 内の <OutputClaims> に以下を追加する。 <OutputClaim ClaimTypeReferenceId="TnCs" Required="true" />
  58. 58. Cont. SignUpOrSignIn.xml <TechnicalProfile Id=“PolicyProfile”> の <OutputClaims> に TnCs を追加して、アップロード。 <RelyingParty> <DefaultUserJourney ReferenceId="SignUpOrSignIn" /> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> <OutputClaim ClaimTypeReferenceId="email" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/> <OutputClaim ClaimTypeReferenceId="identityProvider" /> <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" /> <OutputClaim ClaimTypeReferenceId="TnCs"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile> </RelyingParty>
  59. 59. CIAM Azure AD B2C Azure AD B2B Collabo.
  60. 60. Appendix - One more identity scenario - decentralized identity
  61. 61. Your Identity > App(username, password) play purchases education achievements interests work citizenship u s e r n a m e l l l l l l l l
  62. 62. Your Identity > App(username, password) u s e r n a m e l l l l l l l l play purchases education achievements interests work citizenship
  63. 63. Users People,Apps, andDevices Join, Collaborate, Contribute CCG Bitcoin viaBlockstack Ethereum viauPort Sovrin viaSovrinledger comingsoon UniversalResolver IdentityHub User Agent Stage: Working Implementations Stage: Working Implementations Stage: Designs & Prototypes Stage: Alpha Implementation Stage: Designs in progress DID Authentication W3C Decentralized Identifiers Distributed Systems Blockchainsand Ledgers
  64. 64. ION(アイオン) https://techcommunity.microsoft.com/t5/Azure-Active- Directory-Identity/Toward-scalable-decentralized-identifier- systems/ba-p/560168
  65. 65. © 2018 Microsoft Corporation. All rights reserved. 本情報の内容(添付文書、リンク先などを含む)は、作成日時点でのものであり、予告なく変更される場合があります。 © 2019 Microsoft Corporation. All rights reserved.

×