如何解决Azure 来宾用户的 OAuth2 隐式授权流程失败
我尝试通过 MSAL 库授权 Azure AD 访客 用户访问我的 Web 应用程序。 由于它是一个 SPA,我使用的是隐式授权流程。 对于“标准”用户,流程是可以的。 但是对于“访客”用户(使用“gmail”等个人地址),它无法按照此处所述获取 obo 令牌:
消息是:
{ "error": "invalid_grant","error_description": "AADSTS500341: The user account <user_account> has been deleted from the <tenantId> directory. To sign into this application,the account must be added to the directory.
}
我隔离了 http 请求以绕过 MSAL 魔法(它在 /oauth2/token 请求上失败):
我只是想知道来宾用户是否可以通过此流程获得授权,或者是否有其他方式来授权他们。
解决方法
感谢您分享查询。 Azure AD B2B 用户(gmail 用户)可以继续使用隐式流从 AAD 成功获取访问令牌。您可以使用以下请求来实现相同的目的:
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?client_id={client-id}&response_type=token&redirect_uri={redirect-uri}&scope=openid%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read&response_mode=form_post&state=12345&nonce=678910
现在让我感到困惑的是以下语句“它在此处描述的 web api 令牌验证失败。”以及您附加的屏幕截图使用的是 OBO 流而不是隐式流。 >
所以,是这样的:
- 您使用隐式流为用户获取令牌
- 之后,您将该令牌发送给 API-1
- 然后 API-1 执行 OBO 流程并尝试为另一个 API 获取另一个令牌,例如 API-2
执行第 3 步时失败了?
如果是这种情况,请检查以下部分“截至 2018 年 5 月,某些隐式流派生的 id_token 不能用于 OBO 流。单页应用程序 (SPA) 应通过访问令牌到中间层机密客户端以执行 OBO 流。有关哪些客户端可以执行 OBO 调用的详细信息,see limitations。”
可以在此处找到更多详细信息:https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow
如果不是这种情况,那么请分享更多有关此的详细信息,以便我们更好地了解设置。
,使用代表流时,请按照步骤 here 操作。如果使用 id_token 请求 /token
端点,它将返回此错误。 assertion
应设置为访问令牌。
您在问题中使用了 On-Behalf-Of flow,但未使用隐式授权流程。
尝试使用隐式流程对受邀用户执行以下步骤:
- 在 Azure AD 中添加来宾用户
- 导航到企业应用程序-> 您的应用程序-> 用户和组
- 请求
/authorize
获取令牌
您可以使用隐式流程在浏览器中登录用户。
https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?
client_id={client_id}
&response_type=id_token token
&redirect_uri={redirect_uri}
&scope=https://graph.microsoft.com/user.read
&response_mode=fragment
&state=12345
&nonce=678910
我的测试结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。