如何从ADAL AuthenticationResult中获取ClaimsPrincipal

6
我正在使用Azure Active Directory Authentication Library来在WPF应用程序中登录用户。调用AuthenticationContext.AcquireToken()后,我会得到一个带有一些UserInfoAuthenticationResult,但它没有提供我的应用程序所使用的ClaimsPrincipal。而且System.Security.Claims.ClaimsPrincipal.Current只返回一个空的主体对象,其中没有声明填充。我如何获取已登录用户的ClaimsPrincipal

你需要从ClaimsPrincipal中检索什么样的信息? - Thomas
你尝试过访问 Thread.CurrentPrincipal 吗? - Thomas
我需要访问基本用户信息和用户的所有声明,这些声明与我们通过OAuth登录到AD时获得的相同。Thread.CurrentPrincipal还包含一个空的GenericPrincipal。 - orad
1个回答

4
AuthenticationResult.AccessToken是代表用户的JWT令牌。您可以使用http://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/5.0.0-rc1-211161024读取令牌并创建声明主体。JwtSecurityTokenHandler.ValidateToken的API需要一个TokenValidationParameters,可用于范围验证。 话虽如此,根据您的需求(也许您不需要ClaimsPrincipal),您可能想查看AuthenticationResult.UserInfo属性。

感谢Brent,我现在正在研究UserInfo并从中创建ClaimsPrincipal,但它不包含所有的内容。我会尝试你提供的NuGet。 - orad
请注意,S.IM.Tokens.Jwt的5.x版本是预发布版本,将支持4.5.1和corefx。而4.x版本则是正式发布的质量。 - Brent Schmaltz
我也在努力解决这个问题,正在开发我的第一个WPF项目以使用MS.IdentityModel.Clients.ActiveDirectory。我发现UserInfo为空。这是否意味着我已经将错误的值分配给了AuthenticateContext()构造函数或AcquireTokenAsync()调用? - Rod
真的帮了我继续进行。谢谢@BrentSchmaltz - Sachin Karche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接