首页 > 解决方案 > 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 配置的一部分,我已经

并且 OAuth 正在按预期工作。

作为 OpenId Connect 的一部分

我没有注册任何额外的网址,因为(i)我不知道要注册什么,并且(ii)没有迹象表明我应该做其他任何事情。

标签: djangoopenid-connectdjango-oauth-toolkit

解决方案


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')),
    ...
]

推荐阅读