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.

GoAzure 2015 Azure AD for Developers

3,849 views

Published on

GoAzure 2015のSession 3-2 アプリケーション開発者のためのAzure Active Directoryのスライドです。

http://r.jazug.jp/event/goazure/

Published in: Technology
  • Be the first to comment

GoAzure 2015 Azure AD for Developers

  1. 1. アプリケーション開発者のため のAzure Active Directory GoAzure 2015 / 2015.01.16 JAZUG 青木 賢太郎 JAZUG 亀渕 景司
  2. 2. アジェンダ (Azure AD 1/3) • Azure ADまわりのIDシナリオ – クラウドID – クラウドID+ディレクトリ同期 – フェデレーションID • Azure ADの特徴 – セキュリティ、レポート 2
  3. 3. アジェンダ (Webサーバ 2/3) • Identityライブラリ(主にWebサーバ側) – WIF、Katana – VS2013/2015(Preview)テンプレート • 単一組織のWebアプリ – WIF、Katana、Websites – ホーム・レルム・ディスカバリ • 複数組織のWebアプリ – マルチテナント 3
  4. 4. アジェンダ (クライアント 3/3) • Identityライブラリ(主にクライアント側) – ADAL • クライアントアプリのAzure AD利用 – ネイティブアプリ • Graph API – REST API, Azure AD Graph Client ライブラリ 4
  5. 5. 本セッションでは • アプリケーション開発者の視点 でAzure ADをどのように使う ことができるのか? • クラウドデザインパターン本の Federated Identityパターンの 理解につながればと考えていま す。 5
  6. 6. Speaker's 6 { "objectType": "User", “displayName”: “青木 賢太郎", "mail": "aoki-kentaro@mki.co.jp", “company”: “三井情報株式会社", "onPremisesSecurityIdentifier": null, "odata.type": "Microsoft.DirectoryServices.User" } MKI
  7. 7. Speaker's { "name" : "Keiji Kamebuchi", "corporation" : "pnop Inc.", "mail" : "kamebuchi@pnop.co.jp", "web" : "http://buchizo.wordpress.com/", "twitter" : "@kosmosebi", } 7 buchizo@kosmosebi Senior Fellow
  8. 8. 大事なお知らせ 8 • このセッションは 2015/01/16 時点の情報を 基にしています • 最新情報はWebで❕
  9. 9. AZURE ADまわりのIDシナリオ 9
  10. 10. – それぞれのWebアプリで ユーザ/パスワードを管理 – 社員が辞めた場合は、それ ぞれのWebアプリからユー ザ情報を削除しないといけ ない – ユーザ情報がそれぞれのア プリで異なる。パスワード を覚えるのが大変 10 Webアプリ Webアプリ Green社
  11. 11. – 社内のディレクトリサーバと連 携して、ユーザ情報を一元管理 – 社員が辞めた場合は、それぞれ のWebアプリからユーザ情報 を削除しないといけない – ユーザ情報がそれぞれのアプリ で異なる。パスワードを覚える のが大変 Webアプリ Webアプリ Webアプリ Webアプリ Active Directory Green社
  12. 12. – Azure ADの認 証基盤を使うこ とにより、クラ ウドアプリの ユーザも一元管 理 Webアプリ Webアプリ Webアプリ Webアプリ Active DirectoryADFS (Proxy) Office365 (SaaS) Webアプリ Green社 Azure AD Green社
  13. 13. – オンプレミスのディレクトリが存在しな い場合 – 新たに会社を作るなど、迅速にビジネス を開始する場合など Office365 (SaaS) Azure ADWebアプリ Red社
  14. 14. – Webアプリはユーザ の意思によりAzure ADとの連携が可能に なる – Webアプリ提供者は Office365などを利用 している企業に対して、 クラウドサービスを提 供しやすい 14 複数組織が利用する Webアプリ (SaaS提供するときなど) Red社 Black社 Green社 Azure AD Webアプリとの連携に同意 Black社の AzureADテナント全体管理者
  15. 15. AZURE ADの機能特徴 15
  16. 16. 17
  17. 17. – 不明なソースからのサインイン • テナントに正常にサインインしているが、Microsoftが認識している匿名のプロキシIPア ドレスからの接続元である場合のログレポート。悪意の目的で使用される場合があるた め。 – 複数のエラー発生後のサインイン • 複数回連続してサインインの試行に失敗した後に、正常にサインインしたユーザーの、 失敗したサインイン試行数と成功時のログレポート。ユーザーがパスワードを忘れた場 合もあるが、ブルート フォース攻撃の被害者になっている場合があるため。 – 複数の地域からのサインイン • 異なる国から同一ユーザーによる2回のサインインがあり、それらの国の間をユーザー が移動するのが不可能である場合の、サインインの時間間隔、サインインを行った国、 それらの国の間の推定移動時間ログレポート。ユーザーがパスワードを共有している場 合や、ユーザーがリモート環境を使用している場合があるが、ハッカーが複数の国から そのアカウントにサインインしている場合があるため。
  18. 18. – 疑わしいアクティビティを示す IP アドレスからのサインイン(Premium) • 疑わしいアクティビティのサインイン試行のIPアドレスログレポート。疑わしいアク ティビティは、同じIPアドレスから短期間のうちに実施された多数のサインインの試行 失敗や、疑わしいと見なされる他のアクティビティから識別されます。 – 感染の疑いのあるデバイスからのサインイン(Premium) • マルウェア (悪意のあるソフトウェア) の可能性があるサインイン試行のIPアドレスログ レポート。マルウェアサーバーへの接続が試みられた IP アドレスを感染の疑いのある デバイスとして識別されます。
  19. 19. – 不規則なサインイン アクティビティ(Premium) • 機械学習アルゴリズムによって、“irregular” (不規則) と識別されたサインインの分類 と場所のログレポート。予期しない場所でのサインイン、予期しない時刻のサインイン、 またはそれらの組み合わせにより識別されます。機械学習アルゴリズムでは、イベント が “irregular (不規則)” または “suspicious (疑わしい)” として分類されます。セキュ リティ違反は“suspicious” の可能性が高いです。 – 異常なサインイン アクティビティのユーザー(Premium) • 異常なサインイン アクティビティが検出された全てのユーザーアカウントをレポート。 他のすべての異常なアクティビティレポートのデータが含まれます。
  20. 20. – 監査レポート • サインイン先のアプリケーション、使用デバイス、IP アドレス、場所などのレポート。 – パスワード リセット アクティビティ(Premium) • 組織内で行われたパスワード リセットに関するログ。 – パスワード リセット登録アクティビティ(Premium) • 組織内で行われたパスワード リセット登録のログ。 – グループ アクティビティ(Premium) • ディレクトリ内のすべてのグループ関連アクティビティのログ。
  21. 21. – アプリケーションの使用状況(Premium) • ディレクトリと統合された全ての SaaS アプリケーションの利用状況のレポート。アク セスパネルをユーザーがクリックした回数に基づきます。 – アカウント プロビジョニングのアクティビティ • 外部アプリケーションにアカウントのプロビジョニングを試行した回数の履歴をレポー トします。 – アカウント プロビジョニング エラー • SaaSアプリケーションから Azure AD へアカウントの同期中に発生したエラーをレ ポートします。外部のアプリケーションにアクセスするユーザーの機能に問題があるこ とが考えられます。
  22. 22. IDENTITYライブラリ Azure ADに関係する
  23. 23. .NET3.0 .NET3.5 .NET4.0 .NET4.5+ リソースを保護する Identityライブラリ Webアプリや、Web APIで利用 WCF WIF 1.x WIF 4.5 with WIF Extensions (JWT, VINR) Katana Middleware ASP.NET 5 the security and authorization middleware • WIFの実装 • Katana(OWINベース)の実装 • ASP.NET 5の実装
  24. 24. – Web Forms – MVC – Web API – ASP.NET 5 Starter Web Visual Studio 2015
  25. 25. ASP.NET 4.x Authentication No Authentication Individual User Accounts Organization User Accounts Windows Authentication Single Organization Multiple Organizations On-Premises Access Level SSO, Read directory, Write directory 設定済み単一 Windows ADテナ ントの認証とディ レクトリ管理 動的追加可能な複 数Windows ADテ ナントの認証と ディレクトリ管理 オンプレミス ADFSの認証など Facebook, Google, Twitter, Microsoftアカウン トなどのIDプロバ イダなどや、Ws- Federation, OpenIDなどが使 える Katana WIF
  26. 26. ASP.NET 5 Authentication No Authentication Individual User Accounts Facebook, Google, Twitter, Microsoftアカウン トなどのIDプロバ イダなどを使える ASP.NET 5
  27. 27. – 組織内の複数部門のWebアプリ – クラウドを含めたWebアプリ – クラウドだけのWebアプリ Azure ADWebアプリ Red社
  28. 28. – プロジェクト作成と共に、Azure ADのアプリケーション設定が行われる – 手動でメンテナンスする場合は、Azure ADアプリケーションの設定から Web.confなどを設定する( WIFベースのテンプレートを使った場合) DEMO
  29. 29. DEMO
  30. 30. DEMO
  31. 31. <appSettings> <add key=“ida:FederationMetadataLocation” value=“<フェデレーションメタデータドキュメント>" /> <add key=“ida:Realm” value=“<アプリケーションID/URI>" /> <add key="ida:AudienceUri" value="<アプリケーションID/URI>" /> </appSettings> <system.identityModel> <identityConfiguration> <audienceUris> <add value="<アプリケーションID/URI>" /> </audienceUris> </identityConfiguration> </system.identityModel> <system.identityModel.services> <federationConfiguration> <wsFederation passiveRedirectEnabled=“true” issuer=“ <WS-FEDERATIONサインオンエンドポイント> " realm="<アプリケー ションID/URI>" requireHttps="true" /> </federationConfiguration> </system.identityModel.services> DEMO
  32. 32. DEMO app.UseWsFederationAuthentication( new WsFederationAuthenticationOptions { MetadataAddress = "https://login.windows.net/xxx-tenant-id-xxx- xxx/federationmetadata/2007-06/federationmetadata.xml", Wtrealm = "http://myapp", }); サンプルコード: https://github.com/KentaroAOKI/GoAzureAzureADSingleKatana/blob/master/WebAppAzureADS ingleKatanaGoAzure/App_Start/Startup.Auth.cs C#
  33. 33. DEMO
  34. 34. ホーム・レルム・ディスカバリ • Azure ADのサインイン ページは共通であるた め、ユーザアカウント を入力した際のレルム により各組織に合わせ た動作が実行される。 – 組織毎に配置している STSへリダイレクト – 組織毎のカスタマイズ・ ブランディング・ページ もレルムにより表示 user@domain01.com user@domain02.com (赤字の箇所がレルム) domain01.comのSTS (ADFSサーバ) domain02.comのSTS (ADFSサーバ) Black社 Green社
  35. 35. 36 Azure ADの共通サインイン画面にアカウントを入 力 アカウントのレルムから該当するADSFサーバを見 つけてリダイレクト DEMO
  36. 36. 37 ADFS2.0のデフォルト画面 (Windows Server 2012) ADFS3.0のデフォルト画面 (Windows Server 2012 R2) DEMO
  37. 37. Azure ADの共通ログイン画面にアカウントを入力 アカウントのレルムから該当するブランディング 画像/文字を表示 DEMO http://msdn.microsoft.com/en-us/library/azure/dn532270.aspx
  38. 38. DEMO app.UseWsFederationAuthentication( new WsFederationAuthenticationOptions { MetadataAddress = "https://login.windows.net/xxx-tenant-id-xxx- xxx/federationmetadata/2007-06/federationmetadata.xml", Wtrealm = "http://myapp", Notifications = new WsFederationAuthenticationNotifications { RedirectToIdentityProvider = (context) => { context.ProtocolMessage.Whr = “vividwave.net"; return Task.FromResult(0); } } }); サンプルコード: https://github.com/KentaroAOKI/GoAzureAzureADSingleKatana/blob/master/WebAppAzureADS ingleKatanaGoAzure/App_Start/Startup.Auth.cs
  39. 39. – 複数組織が利用するWebアプリ 複数組織が利用する Webアプリ (SaaS提供するときなど) Red社 Black社 Green社 Azure AD Webアプリとの連携に同意 Green社の AzureADテナント全体管理者
  40. 40. – プロジェクト作成と共に、Azure ADのアプリケーション設定が行われる DEMO
  41. 41. 42 DEMO
  42. 42. DEMO
  43. 43. – https://account.activedirectory.windowsazure.com/Consent.aspx?Clien tId=<クライアントID>&RequestedPermissions=<パーミッション> &ConsentReturnURL=<リダイレクトURL> – DirectoryReaders • シングルサインオン、ディレクトリの読み込みアクセス – DirectoryWriters • シングルサインオン、ディレクトリの読み込み/書き込みアクセス – 指定しない • シングルサインオン DEMO
  44. 44. – 外部アクセス • オン – アプリID/URI • Windows Azure ADでユニークなアプリID/URI – ロゴ • イメージのサイズは、215px x 215px • 中央のイメージのサイズは、94px x 94px • サポートファイルは、.bmp、.jpg、.png) • ファイル サイズは 100 KB 未満 – ディレクトリアクセス • シングル サインオン • シングル サインオン、ディレクトリ データの読み取り • シングル サインオン、ディレクトリ データの読み取りと書き込み 45 215px 94px DEMO
  45. 45. 同意したアプリは自分のディレク トリに登録される。 アクセス管理が可能に。 自分で作成 したアプリ。 DEMO
  46. 46. DEMO
  47. 47. Windows Windows Store Windows Phone 8.1 iOS Android JS ADAL .NET 2.x ADAL .NET 3.x • ADAL ADAL iOS 1.0 (Objective C) ADAL Android 1.0 (Java) ADAL JS (Java Script)
  48. 48. DEMO DEMO
  49. 49. DEMO
  50. 50. DEMO static string clientId = xxx-Client-Id-xxx-xxxx"; const static string commonAuthority = "https://login.windows.net/common"; static Uri returnUri = new Uri("http://appgoazure"); const string graphResourceUri = "https://graph.windows.net"; AuthenticationResult authResult = null; AuthenticationContext authContext = null; private async void ButtonRequestAD_Click(object sender, RoutedEventArgs e) { if (authContext.TokenCache.ReadItems().Count() > 0) { authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); } authResult = await authContext.AcquireTokenAsync(graphResourceUri, clientId, returnUri, new AuthorizationParameters(PromptBehavior.Auto, new WindowInteropHelper(this).Handle)); <Graph APIアクセスにつづく> } サンプルコード: https://github.com/KentaroAOKI/GoAzureWpfApp/blob/master/WpfAppGoAzure/MainWindow.xaml.cs
  51. 51. アプリ (ADFSサーバがある場合) DEMO
  52. 52. (ADFSサーバがある場合、 信頼されている証明書が必要)
  53. 53. GRAPH API ディレクトリの読み込みと書き込み
  54. 54. – 新しいユーザを作成 – ユーザのプロパティを取得 – 役割ベースのアクセスのためのユーザのグループメンバーシップを確認 – ユーザアカウントの無効化や削除 56
  55. 55. – Version 1.5 – Version 2013-11-08 – Version 2013-04-05 – https://graph.windows.net/vividwave.net?api-version=1.5 – https://graph.windows.net/vividwave.net?api-version=2013-11-08
  56. 56. – サービスルート • Azure AD Graph APIのサービスルートは常にhttps://graph.windows.net – テナントID • オブジェクトIDもしくは、登録されているドメイン – リソースパス • アクセスするリソースを指定 – クエリパラメーター • バージョンクエリパラメータ以外に、$filter、$orderby、$expand、$top、$formatの ODataクエリパラメータも利用可能
  57. 57. – http://msdn.microsoft.com/ja-jp/library/azure/hh974478.aspx
  58. 58. – "aad.deltaLink": "https://graph.windows.net/vividwave.net/directoryObjects?deltaLink=ADdwukWIFzUEWfYfKAaFcuZdNBkFzXHC22faZX5H- wPjyNiIwvexHMt15jFPmlZQELMM_88V4NvGyLiC6H2LFW5HXUrCjHSaS3ck3eME7eGr2sh0PSl8i20uVLKefAdOX2Y- lCLdDe_Xgk5SHbwthlZpNhG8FUj1J1rrseuW1ssl7wyla-VLshVSw0zlIuG4Y3aJ5CYYN3XswEvKCk3YeG8SXPLAJ01cH0g6tTYzZ- IttOY1QR9Wrc58qdN3hW57gDt5CFU13D7KvNZROG3ceyq9HQCtMQD_rT6m9M7P- gVGqkZRwlKBrNu3cpXSUIzR7rQ5VMHxma-SeyGgYctrnGag3Vl-AwcHMG--u4taWINgsPGBwiKSl9_FqG1Nc1F1baNn_w- 2b8rhkAvTYqUMvEBmF_zHdCZBZNFA33fIxPktPIvn5W59QxkEir6CQIGsZS_CfI1CzU423gC73nvKZnuSvp7_hr2VdYbUVaPQVVW Oa0340j9r8JYnnw2wv4He6_YQ1rBhP8Br1It2F7vbjfWFGVnitUkjC- hCKqmkoaDemFEY6RfrzEWa4B5uvcKIwSqKMPY0zmJb6uh0E8sl8JdXB4FcEj1QzIvyV_lYI1lwLSL7HgYJ_lOYh1IIYsVxuWfprqmFl KkVzDesm7GbJJ6qCD2CojRLQWATTQY8j7ZVSoFFa04NWQA- VOEQBXwKIBsL08zuDcArDuVX8zJMpmjavbfU2yl6uSfPYp_B9jueS8pEWUjzwVvpPk04CJfTo_0z6Tuwg7E724QC0PXMukLEsfX- 1x-9pOjWKgXwmpUg6yOJPutEC-TshSvDDgU6pM_Tdnmu-ISW-72RslPhu02PQzROdZQeBeaIgfxoUkX- q5iZU573cTgtT7m1TC6BUhcJIxQEIgeC08z4xueh- w7c1aWsrNf2hO5YxdGjCpNlX3TWPmMzs47TCKDZtTMFwMQcLwP8Pni59ZqwS56b0FwB- B0FiaDWiqyYThxhmMr76F7WNf8TUej9F47lT- gRPRRJnV2ZhMgfDMrYXADgqTdWUNHmL_cFvIm52PgemFDtj8o69weTyeIfGmUaSS_2ke2ZU9XixPNpWQX7phzgJrl0pT2VoH1 w5iW9cV7cG5irmY- XuWISzsc4nnKjnyFwwWuUYqvcvGXpJ_ozY4EH_RVgFgnRFGiVyqPTv6iwOK7pyWEUK9antE6lzCGLSkEkIIuXdOQ_XG9yIw4Uor B52cOuqJFhoTm__VGjhnvGNUNeukKwNVYSFoUxl3phpOFxxuAUQsHja5u7FarGYsiVPnA_s7hdxfBz2m6ZDKmb7RkGlpqPu_ssIF c17mOvFOMaEk7qxF5J96WPnfWxTc1-B8cgFkahh0xb6pmpf_Z_8ExIZ_m5_ZXZ9yeU5IXPkRx0kj8t- sZrgHsgvjC_R1mxyd228Pf9lV24yNvjaXEeva3SQ-L_1YtojhyU9ZqDNiB- MIVLpWUPat4fSYgKiGinkkC4vAfwgtcbItSPtjRTp8ni6SUKb0RqsU-jeF- tBx2tk4m3UghnfLhoHj3FcByBENvE7xHOmRCkDslLkvJQflJG9m7pSisKeFuT3bLWyvwwaWDzmTQlYf6wJKSV0MFIuzzvGGsQl9oz vLIeEJHh4QXlWFaOXnW4L4RtssWrQ2PsDDt88FXy4mOA-7146JXWM5fDxvED7koeGroSEJC-fnTjdor9EhJqNYZJxH- Nho7j8WekIxU1g_PmtfsYRnre7Q.4ddoCM3TjXK8AG7KvzgWCP-iWkNf2uozL1-3Nkkd2R8" 60
  59. 59. – Graph APIバージョンは1.5 – 1つのオブジェクトに100個の拡張プロパティ – プロパティの型は、文字列(256文字まで)とBinary(256バイトまで) – 登録できるオブジェクトは、User、Group、TenantDetail、Device、 Application、ServicePrincipal – 拡張機能プロパティは、開発者のディレクトリにある Application オブジェ クトに登録 – 組織内の承諾された任意のアプリケーションからアクセス権限に従ってアク セス可能 – 組織のディレクトリ内でアプリケーションまたは承諾が削除された場合は、 ターゲット ディレクトリ オブジェクトで拡張機能プロパティが削除
  60. 60. – ディレクトリ • 読み込み • 書き込み DEMO
  61. 61. string graphRequest = String.Format(CultureInfo.InvariantCulture, "{0}/{1}/users?api- version={2}", graphResourceUri, authResult.TenantId, graphApiVersion); HttpClient client = new HttpClient(); HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, graphRequest); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken); HttpResponseMessage response = await client.SendAsync(request); string content = await response.Content.ReadAsStringAsync(); TextBoxResult.Text = content; DEMO C# サンプルコード: https://github.com/KentaroAOKI/GoAzureWpfApp/blob/master/WpfAppGoAzure/MainWindow.xaml.cs
  62. 62. Windows Windows Store Windows Phone 8.1 iOS Android JS Graph Client 2.0 .NET Office365 SDK iOS (Objective C) Office365 SDK Android (Java)
  63. 63. ActiveDirectoryClient adc = await GetActiveDirectoryClient(); var Apps = adc.Applications.Where(App => App.DisplayName.StartsWith("W")) .Take(10).ExecuteAsync().Result.CurrentPage.Select(App => App.DisplayName); string content = string.Join("rn", Apps); DEMO GET /0c5af5a3-b318-4415-b5ec- c03c771e421x/applications()?$filter=startswith(displayName,'W')&$top=10&api- version=1.5 HTTP/1.1 Graph API C# サンプルコード: https://github.com/KentaroAOKI/GoAzureWpfApp/blob/master/WpfAppGoAzure/MainWindow.xaml.cs
  64. 64. まとめ
  65. 65. 67 WIF Katana ASP.NET 5 ADAL Graph Client Webアプリ ネイティブアプリ Azure AD ADAL Graph Client
  66. 66. さいごに • Azure ADを利用すると – ユーザの一元管理だけでなく、最新のセュリ ティ情報や技術が常に提供される – アプリケーションの追加開発を行わなくても、 他の機能を後から設定で利用することが可能 になる(多要素認証など) – オンプレミスとの連携など構成変更時もアプ リケーションの追加開発を行わなくてもよい
  67. 67. 69 • このセッションは 2015/01/16 時点の情報を 基にしています • 最新情報はWebで❕ ※Azureは日々進化するのでこの時点から 情報が劣化していきます… 質 問 シ テ ネ !

×