開発者のためのアイデンティティ・テクノロジー~ Windows Phone と 認証/認可 技術日本マイクロソフト株式会社エバンジェリスト安納 順一(あんのう じゅんいち)blogs.technet.com/junichia@junichia
本日のテーマ1. IdP の役割2. IdP とプロトコル     •    SAML 2.0     •    OAuth 2.03.       IdP にアクセスするには     •    Active Directory     •  ...
IdP の役割          3
認証と認可  認証:本人であることを確認  認可:アクセス権を与えること         認証         認可     どんなシステムにも「認証」と「認可」はつきまとう 「認可」に関するプロトコルが注目を浴びている          ...
登場人物と課題                                 ID   パスワード                                      氏名          利用者                   ...
課題を解決するには認可の仕組みが必要                                 ID   パスワード                                      氏名          利用者        ...
2つの課題と解決方法  個人情報へのアクセスを認可  認可のプロセスに以下の要素を組み込む(プロトコル化する)  • 誰が    (例)本人  • いつ    (例)アプリがアクセスするとき  • どのように (例)画面にアラートが表示され、Y...
セキュリティトークン(アサーション) • 認証の結果、IdP によって生成、発行される • ユーザーの各種属性を含めることができる   ※セキュリティトークン=個人情報 • 認可のレベル(権限の強さ、ロール)を明確にできる • 署名によって正当...
アプリ/サービスが利用を認可するまでの流れ(例1)                          信頼  利用者                                              IdP        アプリ    ...
アプリ/サービスが利用を認可するまでの流れ(例2)  利用者                                                 IdP        アプリ                        ① Use...
IdP の役割 と サービスの役割 IdP の役割 • ユーザーの身元を保証しセキュリティトークンを発行する サービス/アプリの役割 • セキュリティトークンを受け取り解析する • セキュリティトークンに含まれた個人情報を利用する • ユーザー...
IdP とプロトコル             12
「認可」が重要視されるシチュエーション                                  プロトコル    システム間の連携        企業間        企業内                      SAML ...
企業内システムとソーシャルアプリの違い• 企業内システム   • 「システム(アプリ):人」の「信頼」が担保されている• SNS および ソーシャルアプリ   • いかなる「信頼」も担保されていない      • 特に「人」と「アプリ」の信頼関...
OAuth と WS-*/SAML の違い• いずれも認可をするためのプロトコル• WS-*/SAML :「情報の送出」を「セキュリティポリシー」が認可する• OAuth :「『情報にアクセスするAPI』へのアクセス」を「利用者が」認可する  ...
Facebook(OAuth 2.0)の場合       利用者                        IdP               利用している               自分のもの                      ...
“API へのアクセスを認可する” とは? 外部のアプリケーションに対し、 各種情報にアクセスするためのAPIの利用を認可する仕組み     Identity&Service Provider    (Twitter/Facebook/Goog...
Facebook(OAuth 2.0 デスクトップアプリ)の場合       利用者                  アプリケーション                      Facebook          アプリ利用開始       ...
Windows Phone アプリへの実装                     19
Windows Phone と IdP               ライブラリ                         プロトコル                    Identity Provider          SL.Ide...
Windows Phone と Active Directory• System.DirectoryServce がサポートされていない   – Active Directory に直接アクセスできない   – 何らかのサービスを介して認証の代...
Windows Phone と Active Directory Federation Service               WS-Trust(SOAP)      AD FS           AD DS              ①...
Windows Phone から AD FS を利用するには          SL.IdentityModel ライブラリ          •   Identity Developer Training Kit 2010 April に含ま...
SL.IdentityModel ライブラリの移植手順1. プロジェクトを作成    • テンプレート      :Windows Phone クラスライブラリ(Visual C#)    • 名前      :(例)WP.IdentityMo...
SL.IdentityModel を使用したアプリの作成1. 必要情報の収集     AD FS のエンドポイント       https://<ADFSサーバー>/adfs/services/trust/13/usernamemixed  ...
4. 認証&セキュリティトークンの取得WSTrustClient _client;private void _btnLogin_Click(object sender, RoutedEventArgs e)     { RequestST();...
void client_IssueCompleted(object sender, IssueCompletedEventArgs e)    {        _client.IssueCompleted -= client_IssueCom...
セキュリティトークン(SAML アサーション)<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_b6d37acb-381c-4160-a712-d3eceee44ef...
つづき<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http:/...
5. クレームの抽出var sb = new StringBuilder(128);IClaimsPrincipal n = TokenHandler.Convert(Globals.RSTR);n.ClaimsIdentity.Claims....
private static ClaimsIdentity GetClaimsIdentity( RequestSecurityTokenResponse rstr )      {        XDocument responseDoc =...
サーバー証明書のインポート方法SSL を要求するサービスの場合、証明書がインストールされていないとエンドポイントを見つけられない(There was no endpoint listening エラー)private void _btnInst...
資格情報の再利用について•   認証のために入力した資格情報(UserID/Password)は分離ストレージに保存して再利用す    ることが可能•   保存の際には暗号化することが望ましい           ID/Password 入力 ...
DPAPI を使用した暗号化/復号化いったんByte型に変換してから暗号化する using System.Text; using System.Security.Cryptography; //暗号化 byte[] PinByte = Enco...
暗号化した文字列を参照するにはBase64 にエンコードIsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();if (store.FileExi...
まとめ • 企業内システムとソーシャルアプリ系で   使用するプロトコルが違います • OAuth 2.0 の実装は習得必須 • AD FS の実装方法も習得必須 • 必要なライブラリをそろえておきましょう • Windows Phone を買...
リソースはここに! http://blogs.technet.com/junichia/ サンプルプロジェクトもこちらから                                      37
アイデンティティ・テクノロジーって超楽しい!
The information herein is for informational purposes only and represents the current view of                              ...
Upcoming SlideShare
Loading in …5
×

.NET ラボ~開発者のためのアイデンティティテクノロジーw/ Windows Phone

1,622 views

Published on

2011/12/16 に開催された .NETラボ勉強会で使用した資料です
アイデンティティ関連技術の総合的な説明と、Windows Phone とADFSを連携する手順について解説しました。
http://blogs.technet.com/junichia/ もご覧ください。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,622
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
17
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

.NET ラボ~開発者のためのアイデンティティテクノロジーw/ Windows Phone

  1. 1. 開発者のためのアイデンティティ・テクノロジー~ Windows Phone と 認証/認可 技術日本マイクロソフト株式会社エバンジェリスト安納 順一(あんのう じゅんいち)blogs.technet.com/junichia@junichia
  2. 2. 本日のテーマ1. IdP の役割2. IdP とプロトコル • SAML 2.0 • OAuth 2.03. IdP にアクセスするには • Active Directory • Windows Live • Facebook • Windows Azure AppFabric ACS 2
  3. 3. IdP の役割 3
  4. 4. 認証と認可  認証:本人であることを確認  認可:アクセス権を与えること 認証 認可 どんなシステムにも「認証」と「認可」はつきまとう 「認可」に関するプロトコルが注目を浴びている 4
  5. 5. 登場人物と課題 ID パスワード 氏名 利用者 所属 など ① 本人確認(認証依頼)このアプリは ② 資格情報使いたいけど、 IdP個人情報を渡して大丈夫? 自分のもの ③ 利 用 ④アクセス サービス アプ リ この資格情報や個人情報は 「この資格情報は正しいのだろうか?」 正しいのだろうか? 5
  6. 6. 課題を解決するには認可の仕組みが必要 ID パスワード 氏名 利用者 所属 など ① 本人確認(認証依頼)このアプリは ② 資格情報使いたいけど、 IdP個人情報を渡して大丈夫? 自分のもの ③ 利 用 ④アクセス サービス アプリの利用を認可 アプ リ この資格情報や個人情報は 「この資格情報は正しいのだろうか?」 正しいのだろうか? 6
  7. 7. 2つの課題と解決方法 個人情報へのアクセスを認可 認可のプロセスに以下の要素を組み込む(プロトコル化する) • 誰が (例)本人 • いつ (例)アプリがアクセスするとき • どのように (例)画面にアラートが表示され、Y/N を選択 アプリの利用を認可 • IdP から発行された資格情報を提示する(Kerberos)。 • IdP によって署名されたセキュリティトークンを提示する(SAML、 WS-*、OAuth など)。 7
  8. 8. セキュリティトークン(アサーション) • 認証の結果、IdP によって生成、発行される • ユーザーの各種属性を含めることができる ※セキュリティトークン=個人情報 • 認可のレベル(権限の強さ、ロール)を明確にできる • 署名によって正当性が担保されている セキュリティトークン/アサーション 8
  9. 9. アプリ/サービスが利用を認可するまでの流れ(例1) 信頼 利用者 IdP アプリ ① UserID/Password ② 認証 個人 ③ セキュリティトークン 情報 ④ 認可 9
  10. 10. アプリ/サービスが利用を認可するまでの流れ(例2) 利用者 IdP アプリ ① UserID/Password ② 認証 個人 ③ セキュリティトークン 情報 ④リダイレクト ⑥ 認可 信頼 ⑤ セキュリティトークン サービス 10
  11. 11. IdP の役割 と サービスの役割 IdP の役割 • ユーザーの身元を保証しセキュリティトークンを発行する サービス/アプリの役割 • セキュリティトークンを受け取り解析する • セキュリティトークンに含まれた個人情報を利用する • ユーザーのロールを決定する 残された課題 「セキュリティトークンを発行してもよいかどうかの判断」 11
  12. 12. IdP とプロトコル 12
  13. 13. 「認可」が重要視されるシチュエーション プロトコル  システム間の連携  企業間  企業内 SAML /WS-*  クラウドへの移行  社内 IdP の利用 企業システ ム  ソーシャルな IdP の利用 SNS  ソーシャルアプリの台頭 OAuth  個人情報保護のセルフサービス化 13
  14. 14. 企業内システムとソーシャルアプリの違い• 企業内システム • 「システム(アプリ):人」の「信頼」が担保されている• SNS および ソーシャルアプリ • いかなる「信頼」も担保されていない • 特に「人」と「アプリ」の信頼関係は深刻 個人情報をアプリに提供するかどうか || アプリにセキュリティトークンを発行するかどうか 14
  15. 15. OAuth と WS-*/SAML の違い• いずれも認可をするためのプロトコル• WS-*/SAML :「情報の送出」を「セキュリティポリシー」が認可する• OAuth :「『情報にアクセスするAPI』へのアクセス」を「利用者が」認可する セキュリティポリシー 事前に 環境設定 SAML 認 IdP 可 要求「情報が欲しい!」 応答「氏名、メアド...」 アプリケーション 認 ユーザーの情報 可 その都度 OAuth 利用者(情報の持ち主) 15
  16. 16. Facebook(OAuth 2.0)の場合 利用者 IdP 利用している 自分のもの サービスに保存され ている個人情報 個人情報に アクセスしたい FBにアクセ スするアプ リ 16
  17. 17. “API へのアクセスを認可する” とは? 外部のアプリケーションに対し、 各種情報にアクセスするためのAPIの利用を認可する仕組み Identity&Service Provider (Twitter/Facebook/Google 等) ユーザー情報 各種特権(例) 氏名を閲覧 API Lv1 メールアドレスを閲覧 投稿を閲覧 API Lv2 ③ APIにアクセス アプリ API Lv3 つながりを閲覧 近況を投稿 API Lv4 つながりを編集 属性の主体 (持ち主) 17
  18. 18. Facebook(OAuth 2.0 デスクトップアプリ)の場合 利用者 アプリケーション Facebook アプリ利用開始 認証/認可画面へRedirect 認証/認可 画面表示 認証/認可を完了 CallBack url にRedirect 認可コードを発行 Access Token 要求 Access Token 発行 API 呼び出し API 18
  19. 19. Windows Phone アプリへの実装 19
  20. 20. Windows Phone と IdP ライブラリ プロトコル Identity Provider SL.IdentityModel WS-Trust(SAMLトーク Identity Developer Training kit ン) AD FS AD DS Live SDK 5.0 OAuth 2.0(draft 16) Download Center Windows Live Facebook C# SDK OAuth 2.0(draft 10) Facebook Codeplex Windows SL.Phone.Federation OAuth Wrap Azure Windows Azure Platform Training Kit AppFabric Google ACS OpenID 系 検 OAuth 1.0a HigLabo 証 Twitter Codeplex 中 20
  21. 21. Windows Phone と Active Directory• System.DirectoryServce がサポートされていない – Active Directory に直接アクセスできない – 何らかのサービスを介して認証の代行を依頼する必要がある AD DS 認証 利用 認証 認証代行 サービス 21
  22. 22. Windows Phone と Active Directory Federation Service WS-Trust(SOAP) AD FS AD DS ① UserID/Password ② 認証 ⑤ セキュリティトークン ③ 属性 ④ 属性に署名① AD FS にはドメインのユーザーIDとパスワードを渡す(もちろん SSL)② AD 認証は AD FS が代行③ AD DS からユーザーの属性が返される(どんな属性を返すかはAD FSに定義されている)④ AD FS は「属性(クレーム)」に署名をしてセキュリティートークン(SAML アサーション) を生成⑤ WP アプリにはセキュリティトークンが返される 22
  23. 23. Windows Phone から AD FS を利用するには SL.IdentityModel ライブラリ • Identity Developer Training Kit 2010 April に含まれている http://www.microsoft.com/download/en/details.aspx?id=14347 • PC 用 Silverlight 版なので移植が必要 Claims ProtocolsWSTrust ├ Claim.cs ├ IRequestCredentials.cs ├ ClaimCollection.cs ├ IssueCompletedEventArgs.cs ├ ClaimsIdentity.cs ├ IssuedTokenHeader.cs ├ ClaimsPrincipal.cs ├ IWSTrustContract.cs ├ ClaimType.cs ├ RequestedSecurityToken.cs ├ IClaimsIdentity.cs ├ RequestSecurityToken.cs └ IClaimsPrincipal.cs ├ RequestSecurityTokenResponse.cs ├ UsernameCredentials.cs Services ├ WindowsCredentials.cs └ TokenCache.cs ├ WSTrust13Constants.cs ├ WSTrust13ResponseSerializer.cs ├ WSTrustBinding.cs ├ WSTrustBindingUsernameMixed.cs ├ WSTrustBindingWindows.cs ├ WSTrustClient.cs ├ WSTrustRequestBodyWriter.cs └ WSTrustSerializationHelper.cs 23
  24. 24. SL.IdentityModel ライブラリの移植手順1. プロジェクトを作成 • テンプレート :Windows Phone クラスライブラリ(Visual C#) • 名前 :(例)WP.IdentityModel とか2. 参照設定の追加 • System.Runtime.Serialization • System.ServiceModel • System.Xml.Linq3. SL.IdentityModel から ソースをひたすらコピペ 移行したライブラリはこちらにあります http://blogs.technet.com/b/junichia/p/wp7_and_ad.aspx 24
  25. 25. SL.IdentityModel を使用したアプリの作成1. 必要情報の収集  AD FS のエンドポイント https://<ADFSサーバー>/adfs/services/trust/13/usernamemixed  スコープ(ApplyTo、業務アプリの識別名) (例)https://www.contoso.com/2. 参照設定の追加 • 移植したライブラリのプロジェクトを選択3. using の追加 • using SL.IdentityModel.Claims; • using SL.IdentityModel.Protocols.WSTrust; • using SL.IdentityModel.Services; 25
  26. 26. 4. 認証&セキュリティトークンの取得WSTrustClient _client;private void _btnLogin_Click(object sender, RoutedEventArgs e) { RequestST(); }private void RequestST() { _client = new WSTrustClient( WS-Trustクライアントを作成 new WSTrustBindingUsernameMixed(), new EndpointAddress("https://tfadfs.tf.com/adfs/services/trust/13/usernamemixed"), new UsernameCredentials(< >, < >)); var rst = new RequestSecurityToken(WSTrust13Constants.KeyTypes.Bearer) { AppliesTo = new EndpointAddress("https://www.contoso.com/") }; _client.IssueCompleted += client_IssueCompleted; _client.IssueAsync(rst); セキュリティトークンを非同期で要求 } 非同期で実行 26
  27. 27. void client_IssueCompleted(object sender, IssueCompletedEventArgs e) { _client.IssueCompleted -= client_IssueCompleted; if (e.Error == null) { Globals.RSTR = e.Result; MessageBox.Show( e.Result ); } else { MessageBox.Show(e.Error.Message); _btnLogin.IsEnabled = true; } } 27
  28. 28. セキュリティトークン(SAML アサーション)<saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_b6d37acb-381c-4160-a712-d3eceee44ef5"Issuer="http://tfadfs.tf.com/adfs/services/trust" IssueInstant="2011-11-28T00:16:18.445Z"xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"><saml:Conditions NotBefore="2011-11-28T00:16:18.445Z" NotOnOrAfter="2011-11-28T01:16:18.445Z“><saml:AudienceRestrictionCondition><saml:Audience>https://www.contoso.com/</saml:Audience></saml:AudienceRestrictionCondition></saml:Conditions><saml:AttributeStatement><saml:Subject><saml:SubjectConfirmation><saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod></saml:SubjectConfirmation></saml:Subject><saml:Attribute AttributeName="name" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"><saml:AttributeValue>西城秀樹</saml:AttributeValue></saml:Attribute><saml:Attribute AttributeName="emailaddress" AttributeNamespace="http://schemas.xmlsoap.org/ws/2005/05/identity/claims"><saml:AttributeValue>administrator@tf.com</saml:AttributeValue></saml:Attribute><saml:Attribute AttributeName="companyname" AttributeNamespace="http://schemas.tf.com"><saml:AttributeValue>マイクロソフト</saml:AttributeValue></saml:Attribute><saml:Attribute AttributeName="department"AttributeNamespace="http://shcemas.tf.com"><saml:AttributeValue>エバンジェリズムグループ</saml:AttributeValue></saml:Attribute></saml:AttributeStatement><saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password" AuthenticationInstant="2011-11-28T00:16:18.023Z"><saml:Subject><saml:SubjectConfirmation><saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod></saml:SubjectConfirmation></saml:Subject></saml:AuthenticationStatement> 28
  29. 29. つづき<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" /><ds:Reference URI="#_b6d37acb-381c-4160-a712-d3eceee44ef5"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" /><ds:DigestValue>mT+IdNIJq6No0jKKX034keFNO+0HZ3dIbnOrDnzfnI4=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>fQ/ju362tt3EGKAMOtlfFwNAa7+dZoLftbNv1wyFjkytnPaD/BlxASXkDf2KeyBG8lxIpPDBTJFczME8A3gpHKBLuFIlURldx4V5ZuVkxzltLqjInHs/ectAzbagSHhDVYlRuo3F8zGoV2YFH4ZHme1snqPk0ArB60W5vh8jnAvmN7VsMovmmwPupMc5d4WLeXKH7/2Piz8Q2gM2sQb818lPhYzP9V80gJPPyDX6gbbn+QUjcnITv8nohZOutophufy54498Ul6EnBfFuEUToaZZCVfh6O5NaO/gXHp4XvNgWkRNbNM1IVYBHiOrQyTPrVrccLpYKMxed1j3yJS/Nw==</ds:SignatureValue><KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><X509Data><X509Certificate>MIIC1jCCAb6gAwIBAgIQX4B1j9QgNZ9GI3IsMJ/+vTANBgkqhkiG9w0BAQsFADAnMSUwIwYDVQQDExxBREZTIFNpZ25pbmcgLSB0ZmFkZnMudGYuY29tMB4XDTExMDQxNTA1NDIwM1oXDTEyMDQxNDA1NDIwM1owJzElMCMGA1UEAxMcQURGUyBTaWduaW5nIC0gdGZhZGZzLnRmLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALcp//XyPz6m9F5ok4ebtuz7XsIdesuvlze5OgN2FD4PkAykETXHRgeheAq1TtbTN/nIiTy11kKgEAseyUSfvMGJarf49vui+zNcy37t+tbrBGdx+MRhuncTb7+O8FKJ3Wg/q9h8e10hq3VeEoxhzd4Ghdl1R4DfJYf10PztfFeQPvoD3FJNgca7v1BB1gRtUEEykmJvSoZFt18mhk1l+9Bsk5SJyEZaZc4M99ubqriVzzgDMZBa02+9Y6nmyy0P+sNrPnMSg031IulcGH+Zp8/W2B2ojHx3HisNkhYc8cQPYtLVoYanZ/qLG6hdqphM5TFi67QubdqclAE7MAoOx50CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAsU3E1uCieRjMAeVel29h9/oHLXy8hoGiy7iG3cgQBysA3Mlm3BjrLII4ze2JEZ74U8t5dk4K3K04emDuy4JhKpOP/iZXRN56UEuhIidFfsHi/k9PLXPEgG1AJnueK52u71xj8noyPJ1EsYwVWTqm5emN5CVDEpJtPFJmsdrBviChFaOO9XURrz2rcp+TAt56cDJKFqj39aKv5YAYWBiSj0UP5cSnXxI7F3lk7kNS19L2HdhPliXFoXI+doQ6ynOJrVUSqVMIbww7nOehWxI6TyWo9+A6TTl3LmpdNYyFYXJFjNI0JMKBm1U6yEvXEApI15LQ8IfJtSjPHoIPBHfSig==</X509Certificate></X509Data></KeyInfo></ds:Signature></saml:Assertion> 29
  30. 30. 5. クレームの抽出var sb = new StringBuilder(128);IClaimsPrincipal n = TokenHandler.Convert(Globals.RSTR);n.ClaimsIdentity.Claims.ToList().ForEach(vc => sb.AppendFormat("{0}n {1}nn", vc.ClaimType, vc.Value));MessageBox.Show(sb.ToString());public static class TokenHandler{ private static XNamespace ASSERTION_NAMESPACE = "urn:oasis:names:tc:SAML:1.0:assertion"; private const string CLAIM_VALUE_TYPE = "http://www.w3.org/2001/XMLSchema#string"; // bit of a hack public static IClaimsPrincipal Convert(RequestSecurityTokenResponse rstr) { return new ClaimsPrincipal( GetClaimsIdentity( rstr ) ); } private static ClaimsIdentity GetClaimsIdentity(RequestSecurityTokenResponse rstr) { (この部分は次ページを参照してください) }} 30
  31. 31. private static ClaimsIdentity GetClaimsIdentity( RequestSecurityTokenResponse rstr ) { XDocument responseDoc = XDocument.Parse(rstr.RequestedSecurityToken.RawToken); XElement attStatement = responseDoc.Element(ASSERTION_NAMESPACE +"Assertion").Element(ASSERTION_NAMESPACE + "AttributeStatement"); var issuer = responseDoc.Root.Attribute("Issuer").Value; ClaimCollection claims = new ClaimCollection(); foreach (var c in attStatement.Elements(ASSERTION_NAMESPACE + "Attribute")) { string attrName = c.Attribute("AttributeName").Value; string attrNamespace = c.Attribute("AttributeNamespace").Value; string claimType = attrNamespace + "/" + attrName; foreach (var val in c.Elements(ASSERTION_NAMESPACE + "AttributeValue")) { claims.Add(new Claim(issuer, issuer, claimType, val.Value, CLAIM_VALUE_TYPE)); } } return new ClaimsIdentity(claims); } 31
  32. 32. サーバー証明書のインポート方法SSL を要求するサービスの場合、証明書がインストールされていないとエンドポイントを見つけられない(There was no endpoint listening エラー)private void _btnInstallCert_Click(object sender, RoutedEventArgs e) { CertP7BPath = “http://<WEBサーバー>/<証明書のファイル名>.p7b"; WebBrowserTask webBrowserTask = new WebBrowserTask(); webBrowserTask.Uri = new Uri(CertP7BPath, UriKind.Absolute); webBrowserTask.Show(); } 32
  33. 33. 資格情報の再利用について• 認証のために入力した資格情報(UserID/Password)は分離ストレージに保存して再利用す ることが可能• 保存の際には暗号化することが望ましい ID/Password 入力 ID/Password を送信 認証結果 次回以降は起動したらすぐ に認証開始 33
  34. 34. DPAPI を使用した暗号化/復号化いったんByte型に変換してから暗号化する using System.Text; using System.Security.Cryptography; //暗号化 byte[] PinByte = Encoding.UTF8.GetBytes(<文字列>); byte[] ProtectedPinByte = ProtectedData.Protect(PinByte, null); //復号化 byte[] PinByte = ProtectedData.Unprotect(ProtectedPinByte, null); n = Encoding.UTF8.GetString(PinByte, 0, PinByte.Length); 34
  35. 35. 暗号化した文字列を参照するにはBase64 にエンコードIsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();if (store.FileExists(encryptpin.FilePath_username) ) { MessageBox.Show( System.Convert.ToBase64String(encryptpin.ReadPinFromFile(encryptpin.FilePath_username)) ); }else { MessageBox.Show(" "); } 35
  36. 36. まとめ • 企業内システムとソーシャルアプリ系で 使用するプロトコルが違います • OAuth 2.0 の実装は習得必須 • AD FS の実装方法も習得必須 • 必要なライブラリをそろえておきましょう • Windows Phone を買ってね! 36
  37. 37. リソースはここに! http://blogs.technet.com/junichia/ サンプルプロジェクトもこちらから 37
  38. 38. アイデンティティ・テクノロジーって超楽しい!
  39. 39. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.© 2011 Microsoft Corporation.All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.

×