Azure AD ADAL请求返回的JWT中缺少objectID

时间:2016-10-18 20:32:12

标签: adal azure-active-directory

我们正在使用ADAL为我们的原生应用实施Azure AD身份验证

我们使用ADAL对Azure AD进行身份验证,并将返回的JWT传递到我们的Web应用程序以进行验证并登录到相应的帐户。

我们遇到的问题是,使用ADAL返回的JWT不包含用户的objectID。

我们猜测这与我们如何配置Azure AD本机应用程序和/或我们传递ADAL身份验证请求的参数有关。

是否有人对我们错误配置提出任何建议。

1 个答案:

答案 0 :(得分:0)

当您从Azure AD获得此类令牌时,它被称为“直通”令牌。从技术上讲,这意味着令牌所代表的用户在发生身份验证的租户中没有存在。关于直通令牌的故事标志是缺少oid声明,idp声明的存在,altsecid声明的存在,以及最明显的idp声明声称其值与iss声明不符。

第三方应用程序永远不应从Azure AD接收直通令牌。在这种情况下,令牌适用于ID为00000002-0000-0000-c000-000000000000的应用,而不是您的应用。它是Microsoft Graph或AAD Graph(我忘了哪个)。您应该永远不会验证aud声明不是您的申请的令牌。在任何时间点,该应用程序的所有者都可以更改令牌格式并完全破坏您的应用程序。相反,您应该使用应用程序的AppID URI作为传递给ADAL的resource参数,并将生成的令牌发送到您的Web服务。我们在aka.ms/aaddev上有很多样本,向您展示如何创建自己的Web API。

尽管如此,我认为这不是你的问题。看起来您正在与租户39f8b586-1a6c-413e-9fd3-70b57a1d9fa0签署用户,即“Mars Feature 3 Native”租户。这可能是您传入ADAL的authority参数的值。因此,当您登录test.user69@smartsheet365.onmicrosoft.com时,它们会通过Mars租户传递到您的应用程序(因为该令牌不适用于您的应用)。相反,您应该使用租户3836f4a1-67af-43f2-a675-f9f54899abe0,即smartsheet365.onmicrosoft.com租户。然后,您应该回到从Azure AD获取普通用户令牌。