FIDO in Windows10
-
Upload
naohiro-fujie -
Category
Technology
-
view
2.535 -
download
1
Transcript of FIDO in Windows10
FIDO in Windows10MVP for Forefront Identity Manager
Naohiro Fujie / @phr_eidentity / http://idmlab.eidentity.jp
1
自己紹介2
Blog
IdM実験室(Identityに関することを徒然と):http://idmlab.eidentity.p
Social
Facebook Page : eIdentity(Identityに関するFeed):https://www.facebook.com/eidentity
記事
Windowsで構築する、クラウド・サービスと社内システムのSSO環境(http://www.atmarkit.co.jp/fwin2k/operation/adsf2sso01/adsf2sso01_01.html)
クラウド・サービス連携の基本と最新トレンド(http://www.atmarkit.co.jp/fwin2k/operation/idftrend01/idftrend01_01.html)
開発者にとってのWindows Azure Active Directoryの役割と今後の展開(http://www.buildinsider.net/enterprise/interviewvittorio/01)
その他
日本ネットワークセキュリティ協会(JNSA)アイデンティティ管理WG(書籍:「クラウド環境におけるアイデンティティ管理ガイドライン」etc)
OpenID Foundation Japan 教育・翻訳WG(OAuth/OpenID Connect仕様翻訳)、エンタープライズ・アイデンティティWG
FIDO Support in Windows 10?3
http://blogs.windows.com/business/2015/02/13/microsoft-announces-FIDO-support-coming-to-windows-10/https://blogs.windows.com/business/2015/04/21/windows-10-security-innovations-at-rsa-device-guard-windows-hello-and-microsoft-passport/
Agenda
True SSOの実現に向けて
Windows 10 + FIDO 2.0 = Azure AD Join
まとめ
4
True SSOの実現に向けて
5
True SSOの実現に向けて - 過去~現在
Active Directoryドメイン(AD DS)での組織内PCの管理
Windows統合認証 / KerberosによるPCとアプリケーション間のSSO
ドメインネットワーク内に限定
モバイル、クラウドへの展開時に障壁
AD FS / WAPで橋渡しをするものの限定的
(社内PC⇒社外はOK、社外・モバイルは・・・)
6
IdPApps
Organization Network
Office365SAML/OIDC SPAD DS AD FS Windows
Apps
Firewall
VPN or WAP(Reverse Proxy)
Single Sign On
Non SSO
ID/PWD
AD DS / Active Directory Domain ServicesAD FS / Active Directory Federation ServicesWAP / Web Application Proxy
True SSOの実現に向けて – 目指す姿
どこにからでも、どんなデバイスからでも、デバイス~アプリケーション間でのSSOを実現
必要な要素
どこからでも使えるID管理基盤
どこからでも使えるデバイス管理基盤
各基盤に対応するデバイス
過渡期における移行も大事
レガシー基盤との橋渡し
7
IdPApps
Organization Network
Office365SAML/OIDC SPAD DS AD FS Windows
Apps
Firewall
VPN or WAP(Reverse Proxy)
Single Sign On
Non SSO
ID/PWD
どこからでも使える- ID基盤-デバイス管理基盤
対応デバイス
対応デバイス
橋渡し
キーワード
Microsoft Azure Active Directory(Azure AD)
Device Registration Service(DRS)
Windows 10
Microsoft Passport
Web Account Manager
AAD Token Broker Plugin
Windows Hello
8
Microsoft Azure Active Directory
Microsoft提供のIDaaS
IdP機能
Office365等、SAML/OIDC対応アプリケーションとの連携、プロビジョニング
OAuth2.0によるWebAPI保護
デバイス管理機能(DRS)
デバイスの登録とポリシーの強制
AD FS等のIdPとの連携、Graph APIによるID・デバイス情報の同期
9
External IdPs Azure Active Directory Apps
Office365
SAML/OIDC SPWebAPI
AD FSSAML IdP
MicrosoftAccount
IdP(SAML/OIDC)
AuthZ(OAuth2.0)Device
Mgmt
Reporting
http://www.slideshare.net/naohiro.fujie/azure-adidentity
Windows 10
2015年夏~リリース予定
PC向け、モバイル向けのエディション
ユニバーサル・アプリケーション・プラットフォームによるアプリケーションの共通化
Azure ADとの統合の実装
Microsoft Passport
生体認証の実装
Windows Hello
10
Azure AD と Windows 10で実現する姿11
Internal Services Azure Active Directory Cloud Services
Office365
SAML/OIDC SPWebAPI
AD FSAD DS
IdP(SAML/OIDC)
AuthZ(OAuth2.0)Device
Mgmt
Reporting
Store Apps
Registered Windows 10 Devices(Internal or External)
Sync
Org’s Apps
Single Sign On
統一されたID/デバイス管理
クラウド、オンプレのHUBとして機能
統一ポリシーの適用
デバイスの種類、アプリケーションの種類に依存しないSSO
Webアプリケーション、ネイティブアプリケーション、デバイスを跨いだSSO
PC、モバイルに向けた共通のエクスペリエンス
Windows 10 +FIDO 2.0=Azure AD Join
12
Azure AD Join~アプリケーション利用の流れ- Microsoft Passport / Windows Hello
Device Registration(Azure AD Join)
Azure AD DRSによるデバイス証明書の発行とプロビジョニング
Key Pairの生成(Device Key / User Key)とAzure AD上に公開鍵の登録
Azure ADによって発行されたNGC KEY-IDをデバイスのTPMにストア
User Logon(デバイスへのログイン)
ストアされたKGC KEY-IDと秘密鍵へPIN / 生体情報などを使ってアクセス
NGC KEY-IDを秘密鍵で署名してサインイン要求
Primary Refresh Token(PRT)を発行
Access to Application
Azure ADへPRTを送付して代わりにAccess Tokenを受け取る
Access Tokenを使ってアプリケーションを利用
13
WindowsHello
MicrosoftPassport
Device Registration14
IdP Store / TPM
Azure AD
Other IdP
Private Key
Windows 10 Device
Azure AD
AuthN Service
Device Registration Service
Key Registration Service
1.Obtain Token to Access DRS
2.Device Registration Request
3.Provision Device Certificate
5.Register Public Key
4.GenerateKey Pair
6.Provision NGC KEY-IDNGC KEY-ID
Keys …
Device Registration15
16<RepLookup v="5"><G>D576978E-9DC9-4D48-8E03-479391E35482</G><O>00000000-0000-0000-0000-000000000000</O><D>10.0.8110.6</D><C>11.00.10011.0</C><OS>10.0.10074.0.0</OS><I>9.11.10011.0</I><L>en-US</L><RU></RU><RI>0.0.0.0</RI><R><Rq><URL>https://clouddomainjoin.azurewebsites.net/9/join.html</URL><O>POST</O><T>TOP</T><HIP>127.0.0.1</HIP>
</Rq></R><WA><PI>Microsoft.Windows.CloudExperienceHost_10.0.10074.0_neutral_neutral_cw5n1h2txyewy</PI><AI>Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy!App</AI><UI>b749ce6e7603e790</UI>
</WA><PRT>668</PRT>
</RepLookup>
<RepLookupResponse><RepLookupResult>
<Rs> <M>azurewebsites.net</M><C>PHSH:005:0:1</C><R>0:1</R><L>10080</L><S>0</S>
</Rs></RepLookupResult><Y>100</Y><T>00000000-0000-0000-0000-000000000000</T><E>0</E>
</RepLookupResponse>
1. GET https://clouddomainjoin.azurewebsites.net/9/join.html HTTP/1.1
2. POST https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=xxx&MSURS-MAC=yyy HTTP/1.1
17<RepLookup v="5"><G>D576978E-9DC9-4D48-8E03-479391E35482</G><O>00000000-0000-0000-0000-000000000000</O><D>10.0.8110.6</D><C>11.00.10011.0</C><OS>10.0.10074.0.0</OS><I>9.11.10011.0</I><L>en-US</L><RU></RU><RI>0.0.0.0</RI><R><Rq><URL>https://clouddomainjoin.azurewebsites.net/9/join.html</URL><O>PRE</O><T>TOP</T><HIP>127.0.0.1</HIP>
</Rq></R><WA><PI>Microsoft.Windows.CloudExperienceHost_10.0.10074.0_neutral_neutral_cw5n1h2txyewy</PI><AI>Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy!App</AI><UI>b749ce6e7603e790</UI>
</WA><PRT>668</PRT>
</RepLookup>
<RepLookupResponse><RepLookupResult>
<Rs> <M>azurewebsites.net</M><C>PHSH:005:0:1</C><R>0:1</R><L>10080</L><S>0</S>
</Rs></RepLookupResult><Y>100</Y><T>00000000-0000-0000-0000-000000000000</T><E>0</E>
</RepLookupResponse>
3. POST https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=xxx&MSURS-MAC=yyy HTTP/1.1
18{"issuer":"https://sts.windows.net/{tenantid}/","authorization_endpoint":"https://login.windows.net/common/oauth2/authorize",“token_endpoint":"https://login.windows.net/common/oauth2/token","token_endpoint_auth_methods_supported":["client_secret_post","private_key_jwt"],"jwks_uri":"https://login.windows.net/common/discovery/keys","response_types_supported":["code","id_token","code id_token","token"],"response_modes_supported":["query","fragment","form_post"],"subject_types_supported":["pairwise"],"scopes_supported":["openid"],"id_token_signing_alg_values_supported":["RS256"],"claims_supported":["sub","iss","aud","exp","iat","auth_time","acr","amr","nonce","email","given_name","family_name","nickname"],
"microsoft_multi_refresh_token":true,"check_session_iframe":"https://login.windows.net/common/oauth2/checksession","end_session_endpoint":"https://login.windows.net/common/oauth2/logout","userinfo_endpoint":https://login.windows.net/common/openid/userinfo
}
4. GET https://login.windows.net/common/.well-known/openid-configuration HTTP/1.1
5. GET https://login.windows.net/common/oauth2/authorize?client_id=xxx&msafed=0&nonce=yyy&prompt=login&redirect_uri=https%3A%2F%2Fclouddomainjoin.azurewebsites.net%2F%2F9%2Fjoin.html&response_type=id_token&scope=openid+sid&uxoptin=true HTTP/1.1
HTTP/1.1 302 FoundLocation: https://login.microsoftonline.com/common/oauth2/authorize?client_id=xxx&msafed=0&nonce=yyy&prompt=login&redirect_uri=https%3A%2F%2Fclouddomainjoin.azurewebsites.net%2F%2F9%2Fjoin.html&response_type=id_token&scope=openid+sid&uxoptin=true
19
HTTP/1.1 302 FoundLocation: https://clouddomainjoin.azurewebsites.net//9/join.html#id_token=xxx&session_state=yyy
6. GET https://login.microsoftonline.com/common/oauth2/authorize?client_id=xxx&msafed=0&nonce=6087626556718901&prompt=login&redirect_uri=https%3A%2F%2Fclouddomainjoin.azurewebsites.net%2F%2F9%2Fjoin.html&response_type=id_token&scope=openid+sid&uxoptin=true HTTP/1.1
ユーザ認証、ログイン
{"aud": “xxxx","iss": "https://sts.windows.net/xxxx/","iat": 1430367703,"nbf": 1430367703,"exp": 1430371603,"ver": "1.0","tid": “xxxx","oid": “xxxx","upn": "[email protected]","puid": “xxxx","sub": “xxx","given_name": "Atsuo","family_name": "Yamasaki","name": "Atsuo Yamasaki",
"amr": ["pwd"
],"unique_name": "[email protected]","nonce": “xxxx","sid": “xxxx","pwd_exp": "3725439","pwd_url":
"https://portal.microsoftonline.com/ChangePassword.aspx"}
7. GET https://clouddomainjoin.azurewebsites.net//9/join.html HTTP/1.1
20<RepLookup v="5"><G>D576978E-9DC9-4D48-8E03-479391E35482</G><O>00000000-0000-0000-0000-000000000000</O><D>10.0.8110.6</D><C>11.00.10011.0</C><OS>10.0.10074.0.0</OS><I>9.11.10011.0</I><L>en-US</L><RU>https://login.microsoftonline.com/common/oauth2/authorize?
client_id=xxxx&msafed=0&nonce=xxxx&prompt=login&redirect_uri=https%3A%2F%2Fclouddomainjoin.azurewebsites.net%2F%2F9%2Fjoin.html&response_type=id_token&scope=openid+sid&uxoptin=true
</RU><RI>127.0.0.1</RI><R><Rq><URL>https://clouddomainjoin.azurewebsites.net//9/join.html</URL><O>POST</O><T>TOP</T><HIP>127.0.0.1</HIP>
</Rq></R><WA><PI>Microsoft.Windows.CloudExperienceHost_10.0.10074.0_neutral_neutral_cw5n1h2txyewy</PI><AI>Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy!App</AI><UI>b749ce6e7603e790</UI>
</WA><PRT>325</PRT>
</RepLookup>
<RepLookupResponse><RepLookupResult>
<Rs> <M>azurewebsites.net</M><C>PHSH:005:0:1</C><R>0:1</R><L>10080</L><S>0</S>
</Rs></RepLookupResult><Y>100</Y><T>00000000-0000-0000-0000-000000000000</T><E>0</E>
</RepLookupResponse>
8. POST https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=xxx&MSURS-MAC=yyy HTTP/1.1
21<RepLookup v="5"><G>D576978E-9DC9-4D48-8E03-479391E35482</G><O>00000000-0000-0000-0000-000000000000</O><D>10.0.8110.6</D><C>11.00.10011.0</C><OS>10.0.10074.0.0</OS><I>9.11.10011.0</I><L>en-US</L><RU>https://login.microsoftonline.com/common/oauth2/authorize?
client_id=xxxx&msafed=0&nonce=xxxx&prompt=login&redirect_uri=https%3A%2F%2Fclouddomainjoin.azurewebsites.net%2F%2F9%2Fjoin.html&response_type=id_token&scope=openid+sid&uxoptin=true
</RU><RI>127.0.0.1</RI><R><Rq><URL>https://clouddomainjoin.azurewebsites.net//9/join.html</URL><O>PRE</O><T>TOP</T><HIP>127.0.0.1</HIP>
</Rq></R><WA><PI>Microsoft.Windows.CloudExperienceHost_10.0.10074.0_neutral_neutral_cw5n1h2txyewy</PI><AI>Microsoft.Windows.CloudExperienceHost_cw5n1h2txyewy!App</AI><UI>b749ce6e7603e790</UI>
</WA><PRT>325</PRT>
</RepLookup>
<RepLookupResponse><RepLookupResult>
<Rs> <M>azurewebsites.net</M><C>PHSH:005:0:1</C><R>0:1</R><L>10080</L><S>0</S>
</Rs></RepLookupResult><Y>100</Y><T>00000000-0000-0000-0000-000000000000</T><E>0</E>
</RepLookupResponse>
9. POST https://urs.microsoft.com/urs.asmx?MSURS-Client-Key=xxx&MSURS-MAC=yyy HTTP/1.1
Azure AD
Other IdP
Private KeyNGC KEY-ID
Keys …
User Login22
IdP Store / TPM
Windows 10
Azure AD
AuthN Service
1.Obtain Noncewith empty request
3.Open IdP Storewith PIN/IRIS/Finger
2.Nonce
4.Sign NGC KEY-ID,Noncewith Private Key as Request
PrimaryRefreshToken
5.Provision PrimaryRefresh Token
23
Azure AD
Other IdP
Private KeyNGC KEY-ID
Keys …
Access to Application24
IdP Store / TPM
Windows 10
Azure AD
AuthNService
PrimaryRefreshToken
Application- OIDC RP
Web AccountManager
ms-appx-web://Microsoft.AAD.BrokerPl
ugIn/app-sid
AAD TokenBroker Plugin
Custom Web Account Provider
Application- Store App
1,6.Access
2.Token Request
4.Exchange Refresh Token to Access Token
5.Access Token
3.Get Primary Refresh Token
25https://login.microsoftonline.com/common/oauth2/authorize?resource=https%3a%2f%2fmanagement.core.windows.net%2f¥u0026response_mode=form_post¥u0026response_type=code+id_token¥u0026scope=user_impersonation+openid¥u0026state=OpenIdConnect.AuthenticationProperties%3dxxxx¥u0026nonce=xxx¥u0026client_id=xxx¥u0026redirect_uri=https%3a%2f%2fportal.azure.com%2fsignin%2findex¥u0026site_id=501430
1. GET https://portal.azure.com/ HTTP/1.1
2. GET https://portal.azure.com/signin/index/ HTTP/1.1
3. GET https://login.microsoftonline.com/common/oauth2/authorize?xxxCookie: ESTSSSO=eyJjdHxxx
{"refresh_token": “xxx","iat": 1429925477
}
<form method="POST" name="hiddenform" action="https://portal.azure.com/signin/index"><input type="hidden" name="code" value=“xxx" /><input type="hidden" name="id_token" value="eyJ0eXxxx" /><input type="hidden" name="state" value="OpenIdConnect.AuthenticationProperties=ptNKxxx" /><input type="hidden" name="session_state" value=“xxx" /><noscript><p>Script is disabled. Click Submit to continue.</p><input type="submit" value="Submit" />
</noscript></form>
26{"aud": “xxxx","iss": "https://sts.windows.net/xxx/","iat": 1429925228,"nbf": 1429925228,"exp": 1429929128,"ver": "1.0","tid": “xxx","oid": “xxx","upn": "[email protected]","puid": “xxx","sub": “xxx","given_name": "Atsuo","family_name": "Yamasaki","name": "Atsuo Yamasaki","amr": ["pwd"
],"unique_name": "[email protected]","nonce": “xxx","c_hash": “xxx","pwd_exp": "4167914","pwd_url": "https://portal.microsoftonline.com/ChangePassword.aspx"
}
4. POST https://portal.azure.com/signin/index HTTP/1.1
まとめ
27
まとめ
遂にKerberosを捨てる時が来た?
ドメイン内SSOとWebSSOの間の大きな溝をようやく越えられるか?
過渡期をどうやって乗り越えるかがインテグレータの腕の見せ所かも
標準化に期待
Windows 10以外への展開が気になる
まだ見えない部分が多い・・・
Windows 10の実装をFIDO 2.0のSPECへ反映
Windows 10がこれからなのでFIDO 2.0もこれから
Windows Helloは現状のTechnical Previewには実装されてきていない
28
参考情報
[Microsoft Virtual Academy]クラウド時代の Active Directory 次の一手シリーズ
http://goo.gl/Lh7rhi
[Microsoft Virtual Academy]Windows 10 Technical Preview の基礎
http://goo.gl/qG6a7I
[Microsoft Virtual Academy]Microsoft Azure インフラストラクチャ ソリューションの実装
http://goo.gl/lD2MMz
[Windows10]デバイス&サービス間のシングルサインオンの仕組み
http://goo.gl/LBUONM
29