【问题标题】:Why does Azure Active Directory OAuth work for me and no one else?为什么 Azure Active Directory OAuth 对我有效,而对其他人无效?
【发布时间】:2019-10-09 01:29:28
【问题描述】:

我正在开发一个 Python/Flask 应用程序,我想使用 OAuth 进行登录。我的雇主使用 Azure Active Directory,因此我正尝试将其作为 OAuth 提供程序与其集成。

我不是 Azure 租户管理员。

我创建了一个应用注册并按照 Microsoft 的文档设置了我的代码,但我是唯一可以成功登录该应用的人。

我正在这样构建我的授权 URL(我的代码中有正确的租户名称、客户端 ID 和重定向 URI):

import urllib.parse
import uuid

authorization_endpoint = 'https://login.microsoft.com/my-tenant.onmicrosoft.com/oauth2/authorize'
query = {
    'client_id': 'my-client-id',
    'nonce': uuid.uuid4(),
    'redirect_uri': 'https://my-app.example.com/authorize',
    'response_mode': 'form_post',
    'response_type': 'id_token',
    'scope': 'openid',
    'state': uuid.uuid4()
}
authorization_url = f'{authorization_endpoint}?{urllib.parse.urlencode(query)}'

当我亲自测试登录应用时,一切正常。但是当其他人尝试时,他们会访问授权 URL,使用他们的凭据登录,然后会得到一个包含此错误的页面:

AADSTS165000:无效请求:请求令牌与用户上下文不匹配。不要在不同的请求或用户会话之间复制用户上下文值(cookies;表单字段;标头);始终在完整的单个用户流中维护所有提供的值。失败原因:[Token值不匹配;]

为什么它对我有用,而对其他人无效?

【问题讨论】:

    标签: python flask oauth-2.0 azure-active-directory


    【解决方案1】:

    授权端点错误。应该是https://login.microsoftonline.com/... 而不是https://login.microsoft.com/...

    【讨论】:

    • 当我看到这个自我回答时,我不相信它是正确的。但微软确实允许这样的情况:同一个应用程序和同一个用户在 login.microsoft.com 上进行了很好的身份验证。然后我需要为范围添加一些权限,瞧:我得到了 AADSTS165000。切换到 login.microsoftonline.com 后,此问题已得到解决。使用相同的应用程序和相同的用户。我确信这在任何地方都没有记录。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多