0

如何在 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_providersettings.INSTALLED_APPS.
  • 添加oauth2_provider.middleware.OAuth2TokenMiddlewaresettings.MIDDLEWARE.
  • 添加django.contrib.auth.backends.ModelBackend, oauth2_provider.backends.OAuth2Backend,django.contrib.auth.backends.ModelBackendsettings.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_PROVIDERsettings. _
  • 设置DEBUG = Falsesettings.
  • 将客户端算法设置为 RSA 以进行 OIDC 测试。

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

4

1 回答 1

0

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')),
    ...
]
于 2021-07-04T16:49:15.500 回答