【发布时间】: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