我们正在使用ADAL为我们的原生应用实施Azure AD身份验证
我们使用ADAL对Azure AD进行身份验证,并将返回的JWT传递到我们的Web应用程序以进行验证并登录到相应的帐户。
我们遇到的问题是,使用ADAL返回的JWT不包含用户的objectID。
我们猜测这与我们如何配置Azure AD本机应用程序和/或我们传递ADAL身份验证请求的参数有关。
是否有人对我们错误配置提出任何建议。
答案 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获取普通用户令牌。