我需要从Azure AD发送的令牌中获取nameidentifier。我假设这对AD的每个用户都是唯一的,并且有一些基于它的自定义授权逻辑。 例如,
AuthenticationResult result = authenticationContext.AcquireToken(webApiResourceId, certificateCredential);
string accessToken = result.AccessToken;
此accessToken作为AuthenticationHeader发送到WebAPI,对其进行解密并将名称标识符提取为
Claim tenantClaim = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier);
但WebAPI上的这个过程是透明的,由ADAL执行。但是,我需要在客户端获取NameIdentifier。 有没有什么方法可以通过解密AccessToken来获取客户端本身的NameIdentifier?我似乎没有找到正确的答案。
答案 0 :(得分:3)
您能否在客户端上扩展您需要NameIdentifier的原因?请注意,客户端不会对令牌执行任何验证,因此您不应基于令牌内容在客户端上执行任何访问控制决策。服务器端可以基于令牌内容做出决定,假定令牌本身在使其内容对应用程序可用之前已经过验证。 另一个重要的考虑因素:访问令牌适用于Web API,客户端不应尝试读取它。即使您设法阅读它,您也会产生极其脆弱的逻辑,因为格式可能随时发生变化,可能会使用客户端不应具有的密钥进行加密,等等。 如果由于各种原因需要访问客户端上的NameIdentifier,则可以检查id_token。 id令牌是与访问令牌一起发送的另一个令牌。 id令牌适用于客户端,因此您可以安全地查看。您可以在AuthenticationResult中将其作为属性找到。 HTH 诉