2017-10-12 88 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