我正在开发Python / Flask应用程序,我想使用OAuth进行登录。我的雇主使用Azure Active Directory,因此我试图将其集成为OAuth提供程序。
我不是Azure租户管理员。
我创建了一个App Registration,并按照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:无效的请求:请求令牌与用户上下文不匹配。不要在不同的请求或用户会话之间复制用户上下文值(cookie;表单字段;标头);始终在完整的单个用户流程中维护所有提供的值。失败原因:[令牌值不匹配;]
为什么它对我有用,对其他任何人都不有用?
答案 0 :(得分:0)
授权端点错误。应该是https://login.microsoftonline.com/...
而不是https://login.microsoft.com/...
。