django - Django + django-oauth-toolkit:如何注册 OpenIdConnect 端点?
问题描述
如何在 django + oauth 环境中访问 OpenId Connect 端点?
我正在尝试使用django-oauth-toolkit (1.5.0)使用 OAuth v2 + OpenId Connect设置Django (3.2.5 ) 环境。我能够按照教程进行操作,这意味着我有 oauth 支持。我能够获得 Oauth 令牌,并用它们保护端点。
但是当我尝试配置 OpenId Connect时,我无法访问 o/.well-known/...
端点,它们根本没有注册。我得到一个 HTTP 404,调试页面显示 django 只知道 o/authorize/
,o/token/
和o/revoke-token/
. OpendId Connect 部分似乎暗示我不需要做任何其他事情,只需启用 OpenId 即可显示这些视图。
我的urls.py
样子:
oauth2_endpoint_views = [
path('authorize/', oauth2_views.AuthorizationView.as_view(), name="authorize"),
path('token/', oauth2_views.TokenView.as_view(), name="token"),
path('revoke-token/', oauth2_views.RevokeTokenView.as_view(), name="revoke-token"),
]
urlpatterns = [
path('admin/', admin.site.urls),
re_path('^accounts/', admin.site.urls),
path('o/', include((oauth2_endpoint_views, 'oauth2_provider'), namespace="oauth2_provider")),
path('api/hello', ApiEndpoint.as_view()), # an example protected resource endpoint
path('api/secret', secret_page, name='secret'), # requires authentication
]
作为 OAuth 配置的一部分,我已经
- 添加
oauth2_provider
到settings.INSTALLED_APPS
. - 添加
oauth2_provider.middleware.OAuth2TokenMiddleware
到settings.MIDDLEWARE
. - 添加
django.contrib.auth.backends.ModelBackend
,oauth2_provider.backends.OAuth2Backend
,django.contrib.auth.backends.ModelBackend
到settings.AUTHENTICATION_BACKENDS
. - 由于这是一个测试环境,
CORS_ORIGIN_ALLOW_ALL
因此设置为True
. - 添加
path('o/', include((oauth2_endpoint_views, 'oauth2_provider'), namespace="oauth2_provider"))
到`urls. - 注册了类型为机密和授权授予类型Authorization Code的 OAuth 客户端,OIDC 不支持 oauth 测试,RSA 用于 OIDC 测试。
并且 OAuth 正在按预期工作。
作为 OpenId Connect 的一部分
- 生成的 RSA 私钥和公钥。
OAUTH2_PROVIDER
在settings
. _- 设置
DEBUG = False
在settings
. - 将客户端算法设置为 RSA 以进行 OIDC 测试。
我没有注册任何额外的网址,因为(i)我不知道要注册什么,并且(ii)没有迹象表明我应该做其他任何事情。
解决方案
url 声明必须是:
# Configuration according to tutorial, this should be ommited
#oauth2_endpoint_views = [
# path('authorize/', oauth2_views.AuthorizationView.as_view(), name="authorize"),
# path('token/', oauth2_views.TokenView.as_view(), name="token"),
# path('revoke-token/', oauth2_views.RevokeTokenView.as_view(), name="revoke-token"),
#]
urlpatterns = [
...
# configuration according yo tutorial, which OMITS OIDC
#path('o/', include((oauth2_endpoint_views, 'oauth2_provider'), namespace="oauth2_provider")),
# This is the proper configuration, which enables OIDC
path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
...
]
推荐阅读
- c - 变量在 for 循环中被 crypt() 意外覆盖
- flutter - 如何在返回 NetworkImage 之前显示加载指示器?
- python - Python dash - 如何突出显示/加粗一行中的特定单词
- pymongo - pymongo:文档必须是 dict 的实例
- reactjs - 如何将缺少的依赖项添加到仅运行一次的 useEffect 挂钩?
- sql - 在一组日期之间查找季度结束日期 - Oracle SQL
- bootstrap-4 - 行中的引导图像对齐
- google-pay - 在没有 UI 的情况下生成 Google Pay 令牌
- android - 在android中的方向更改期间无法恢复表行
- sql - ORacle KEEP DENSE_RANK FIRST 的 Postgres 转换