【问题标题】:How to get ClaimsPrincipal from ADAL AuthenticationResult如何从 ADAL AuthenticationResult 获取 ClaimsPrincipal
【发布时间】:2016-05-20 03:12:31
【问题描述】:

我正在使用 Azure Active Directory 身份验证库在 WPF 应用程序中登录用户。致电AuthenticationContext.AcquireToken() 后,我得到AuthenticationResult 和一些UserInfo,但它没有提供我的应用程序使用的ClaimsPrincipal。此外,System.Security.Claims.ClaimsPrincipal.Current 仅返回一个空的主体对象,其中没有填充任何声明。如何获取已登录用户的ClaimsPrincipal

【问题讨论】:

  • 您需要从 ClaimsPrincipal 检索什么样的信息?
  • 您是否尝试过访问 Thread.CurrentPrincipal ?
  • 我需要访问用户的基本用户信息和所有声明,这些声明与我们通过 OAuth 登录 AD 时获得的声明相同。 Thread.CurrentPrincipal 还包含一个空的 GenericPrincipal。

标签: azure-active-directory claims-based-identity


【解决方案1】:

AuthenticationResult.AccessToken 是代表用户的 JWT 令牌。您可以使用http://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/5.0.0-rc1-211161024 来读取令牌并创建声明主体。 JwtSecurityTokenHandler.ValidateToken 的 api 采用可用于范围验证的 TokenValidationParameters。

综上所述,根据您的需要(也许您不需要 ClaimsPrincipal),您可能需要查看 AuthenticationResult.UserInfo 属性。

【讨论】:

  • 谢谢布伦特,现在我正在研究UserInfo 并从中创建一个ClaimsPrincipal,但它并不包括所有内容。我会试试你引用的 nuget。
  • 请注意,S.IM.Tokens.Jwt 的 5.x 版本是预发布版本,将支持 4.5.1 和 corefx。 4.x 是发布质量。
  • 我也在为此苦苦挣扎,在我的第一个 WPF 项目中使用 MS.IdentityModel.Clients.ActiveDirectory。我发现UserInfo 为空。这是否意味着我为 AuthenticateContext() 构造函数或 AcquireTokenAsync() 调用分配了错误的值?
  • 真的帮助我继续。谢谢@BrentSchmaltz
猜你喜欢
  • 1970-01-01
  • 2018-06-19
  • 2017-07-25
  • 2017-07-12
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多