gpt4 book ai didi

Django、mozilla-django-oidc 和管理员

转载 作者:行者123 更新时间:2023-12-05 01:13:45 35 4
gpt4 key购买 nike

我正在尝试使用 mozilla-django-oidc 将 Okta 与我正在编码的自定义 Django (v.3.0.2) 应用程序连接起来。图书馆。到目前为止,初始用户身份验证和帐户创建(使用 Django 的 user model )有效,但我不明白我需要做什么才能拥有 Django AdminSite工作。

在引入 mozilla-django-oidc 之前,Adminsite 按预期工作。我创建了一个名为“admin”的管理员用户,该用户能够登录。

要集成 mozilla-django-oidc 库,我按照此处的说明进行操作:https://mozilla-django-oidc.readthedocs.io/en/stable/installation.html .说明没有具体提及 AdminSite。

当我在库集成后访问 AdminSite 时,我有以下内容:

  1. AdminSite 使用默认模板 - 我的假设是还将使用 Okta 进行身份验证。
  2. 以前能够登录 AdminSite 的管理员帐户“admin”不再起作用

我的目标是能够访问 AdminSite。我不介意它是通过 Okta 还是通过 vanilla 界面,只要我可以访问它。

以下是文件中的相关部分(为了整合):


urls.py

urlpatterns = [
path('', static_site.site_index, name='site_index'),
path('admin/', admin.site.urls),
path('review/', include('review.urls')),
path('oidc/', include('mozilla_django_oidc.urls')),
]

settings.py

# OICD
AUTHENTICATION_BACKENDS = (
'mozilla_django_oidc.auth.OIDCAuthenticationBackend',
)

OIDC_RP_CLIENT_ID = 'xxxxx'
OIDC_RP_CLIENT_SECRET = 'xxxx'
OIDC_RP_SIGN_ALGO = 'RS256'
OIDC_OP_JWKS_ENDPOINT = 'https://dev-xxx.okta.com/oauth2/default/v1/keys'
OIDC_RP_SCOPES = 'openid email profile'

OIDC_OP_AUTHORIZATION_ENDPOINT = 'https://dev-xxx.okta.com/oauth2/default/v1/authorize'
OIDC_OP_TOKEN_ENDPOINT = 'https://dev-xxx.okta.com/oauth2/default/v1/token'
OIDC_OP_USER_ENDPOINT = 'https://dev-xxx.okta.com/oauth2/default/v1/userinfo'

# Provided by mozilla-django-oidc
LOGIN_URL = reverse_lazy('oidc_authentication_callback')

# App urls
LOGIN_REDIRECT_URL = reverse_lazy('review:dashboard')
LOGOUT_REDIRECT_URL = reverse_lazy('site_index')

欢迎任何想法或指点!

最佳答案

我想出了一个解决方案,可以通过 django 管理员使用 mozilla-django-oidc 登录。这有点 hacky,但重定向管理员登录页面比覆盖 AdminSite 要安全得多。

在我的顶级 urls.py 中有

class CustomLogin(View):
def get(self, request, **kwargs):
return HttpResponseRedirect(
reverse('oidc_authentication_init') + (
'?next={}'.format(request.GET['next']) if 'next' in request.GET else ''
)
)

urlpatterns = [
path('oidc/', include("mozilla_django_oidc.urls")),
path('admin/login/', CustomLogin.as_view()),
path('admin/', admin.site.urls),
# the rest of my urls...
]

如果您不关心是否正确传递 ?next= 值,您可以跳过 CustomLogin 类并改为执行以下操作

urlpatterns = [
path('oidc/', include("mozilla_django_oidc.urls")),
]
# This only works if you break up urlpatterns so the reverse below can find what it needs
urlpatterns += [
path('admin/login/', RedirectView.as_view(
url=reverse('oidc_authentication_init') + ?next=/admin/,
permanent=False
)),
path('admin/', admin.site.urls),
# the rest of my urls...
]

我添加了 ?next=/admin/ 因为默认情况下,一旦您登录,您将被重定向到 settings.LOGIN_REDIRECT_URL 我已经将其用于其他用途

关于Django、mozilla-django-oidc 和管理员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59881651/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com