FIDO in Windows10

Post on 22-Jul-2015

2.529 views 1 download

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": "yamasaki@xxx.onmicrosoft.com","puid": “xxxx","sub": “xxx","given_name": "Atsuo","family_name": "Yamasaki","name": "Atsuo Yamasaki",

"amr": ["pwd"

],"unique_name": "yamasaki@xxx.onmicrosoft.com","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": "yamasaki@xxx.onmicrosoft.com","puid": “xxx","sub": “xxx","given_name": "Atsuo","family_name": "Yamasaki","name": "Atsuo Yamasaki","amr": ["pwd"

],"unique_name": "yamasaki@xxx.onmicrosoft.com","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