Overview
我在 Azure AD 门户注册了一个应用程序。重定向机制在开发过程中一直运行良好,但 Oauth 重定向 URI 上发生了奇怪的转换。
客户端应用程序是使用 Django 框架并使用 MSAL for Python 库构建的。
问题具体
假设我在 Azure AD 应用程序注册中指定了重定向 URI,如下所示:https://myapp.com/auth/redirect
我收到一个错误AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application: '<application ID>'
深入研究发送的请求,我可以看到重定向 URI 在该过程中的某个地方以某种方式被操纵。
(注意转换自https -> http)
...redirect_uri=http%3A%2F%2Fmyapp.com%2Fauth%2Fredirect&scope=User.Read.basic....
但 Azure AD 实际上甚至不接受纯 http 的 URL。
我尝试仅使用 localhost(因为 localhost URL 是规则的例外,只允许使用 https URL)和重定向 URL 来产生相同的错误http://localhost:8000/auth/redirect
身份验证过程有效并且与https://localhost:8000/auth/redirect
它产生与上述相同的结果。
实际问题出来了...
该错误更多地与 Django 内部结构与 MSAL 库的结合有关。
Azure AD适用于 Python 的 MSAL 库 uses reverse(redirect_uri)
方法在内部某处构建重定向 uri,并且由于 Django 请求在内部使用 HTTP,因此添加到请求中的重定向 uri 是 HTTP 的。
Solution
Adding SECURE_SSL_REDIRECT = True
to settings.py
解决了问题。
虽然平凡./manage.py runserver
命令不支持HTTPS,所以
pip install werkzeug django-extensions pyOpenSSL
- Add
django_extensions
在设置.py下INSTALLED_APPS
- 运行服务器
./manage.py runserver_plus --cert /tmp/cert localhost:8000
当程序在具有前端代理的 Web 服务器中运行时,也添加此行,以免更改后端返回的原始请求:
在设置.py->SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)