如何在 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)没有迹象表明我应该做其他任何事情。