【问题标题】:Fetching NameIdentifier from Azure Active Directory AuthenticationResult.AccessToken从 Azure Active Directory AuthenticationResult.AccessToken 获取 NameIdentifier
【发布时间】:2015-03-26 15:49:04
【问题描述】:

我需要从 Azure AD 发送的令牌中获取名称标识符。我假设这对于 AD 的每个用户都是唯一的,并且有一些基于它的自定义授权逻辑。 例如,

AuthenticationResult result = authenticationContext.AcquireToken(webApiResourceId, certificateCredential);
string accessToken = result.AccessToken;

这个 accessToken 作为 AuthenticationHeader 被发送到 WebAPI,它解密它并获取 nameidentifier 作为

Claim tenantClaim = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier);

但是 WebAPI 上的这个过程是透明的,由 ADAL 执行。但是,我需要在客户端本身获取 NameIdentifier。 有什么方法可以通过解密 AccessToken 在客户端本身获取 NameIdentifier 吗?我搜索时似乎没有找到正确的答案。

【问题讨论】:

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


    【解决方案1】:

    您能否详细说明为什么需要在客户端上使用 NameIdentifier?请注意,客户端不会对令牌执行任何验证,因此您不应根据令牌内容对客户端做出任何访问控制决策。服务器端可以根据令牌内容做出决定,因为令牌本身在其内容对应用程序可用之前已经过验证。 另一个重要的考虑因素:访问令牌用于 Web API,客户端不应尝试读取它。即使您设法阅读它,您也会生成极其脆弱的逻辑,因为格式可以随时更改,它可能会使用您的客户端不应该拥有的密钥进行加密,等等。 如果您出于不同原因需要访问客户端上的 NameIdentifier,您可以检查 id_token。 id 令牌是与访问令牌一起发送的另一个令牌。 id 令牌是为客户端准备的,因此您可以安全地查看。您可以在 AuthenticationResult 中找到它作为属性。 高温高压 五、

    【讨论】:

    • 正如我在帖子中提到的,WebAPI 正在使用一些基于 NameIdentifier 的自定义授权逻辑。因此,客户需要提供他们的 NameIdentifier 才能加入服务。因此,我的要求是获取 NameIdentifier。除了解密令牌之外,似乎没有其他方法可以得到它。至于 id_token,它以 null 的形式提供给客户端。客户端使用 AzureAD 的证书身份验证。这就是为什么 id_token 为空的原因吗?
    • 如果您使用的是证书身份验证,那么您返回的令牌不是代表用户,而是代表应用程序身份。这不会产生 ID 令牌。如果您需要载入应用程序,则可以使用许多其他表征应用程序的参数(如 clientid)。另外,我很困惑。如果您需要入职客户,为什么不能简单地将令牌发布到入职逻辑?从您刚刚获得的另一个服务的令牌中提取信息,甚至没有验证它,似乎与我能回忆的任何模式都不匹配。
    猜你喜欢
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 2018-02-17
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 2023-01-26
    相关资源
    最近更新 更多