2017-10-12 85 views
0

我想用ADFS驗證用戶,並且使用ADAL。鑑於我可以獲得AccessToken,驗證似乎起作用。問題是,查看代碼authResult包含UserInfo,其中所有屬性(例如GivenNameFamilyName)均爲null從UFS中的ADFS獲取UserInfo與ADAL

AuthenticationContext authContext = null; 
AuthenticationResult authResult; 
try 
{ 
    authContext = new AuthenticationContext(authority, false); 
    authResult = await authContext.AcquireTokenAsync(resource, clientId, new Uri(returnUri), 
        new PlatformParameters(PromptBehavior.Auto, false)); 
} 

由於ADFS配置,這些值爲空?我注意到解碼AccessToken返回我可以讀取用戶信息。但我不認爲解碼智威湯遜令牌是實現這些信息的正確方法。你有更好的建議嗎?

我也看到有人使用要求獲得信息,但我完全不知道如何使用它UWP,因爲所有的樣品,我發現用

ClaimsPrincipal claimsPrincipal = System.Threading.Thread.CurrentPrincipal as ClaimsPrincipal; 

System.Threading.Thread不適用於UWP 。

回答

0

通常情況下,access_token用於Oauth和OpenID連接方案,並打算由資源使用。爲了識別用戶,我們應該使用id_token(驗證令牌並通過解碼令牌來提取索賠鄰接用戶)。請參閱下面關於令牌的使用:

  • id_token:用於表示用戶身份的JWT令牌。 id_token的'aud'或觀衆聲明的 與本機或服務器應用程序的客戶端ID匹配。
  • access_token:在Oauth和OpenID中使用的JWT令牌連接場景 並且打算由資源使用。此令牌的「審計」或受衆羣體聲明必須與資源或Web的標識符相匹配。
  • refresh_token:此令牌代替收集用戶 憑據提交單點登錄體驗。此令牌是由AD FS發佈和使用的 ,並且不可由客戶端
    或資源讀取。

而且你可以參考下面的鏈接瞭解本地客戶端的Web API方案爲ADFS:

AD FS Scenarios for Developers - Native client to Web API

+0

你能幫助明白我怎麼能得到id_token並提取索賠? – user2297037

+0

'id_token'應該能夠通過'authResult'對象('authResult.IdToken')獲取作爲您共享的代碼。並且從標記中提取聲明,您可以使用'System.IdentityModel.Tokens.Jwt'。這裏是[類似的線程](https://stackoverflow.com/questions/38340078/how-to-decode-jwt-token)供您參考。 –

+0

不幸的是,'authResult.IdToken'爲空... – user2297037

相關問題