【发布时间】:2021-06-26 18:11:35
【问题描述】:
我一直在努力将 django 应用程序与 mozilla-django-oidc 集成,但我似乎无法弄清楚如何正确注销。 在我的主页上,我有
<form action="{% url 'oidc_logout' %}" method="post">
{% csrf_token %}
<input type="submit" value="logout">
假设用户已登录,它会提供注销。登录似乎工作得很好。 在我的设置中,我提供了注销配置
OIDC_OP_LOGOUT_ENDPOINT = cfgs.get("LOGOUT_ENDPOINT")
OIDC_OP_LOGOUT_METHOD = "test_app_2.openid.logout"
LOGOUT_REDIRECT_URL = reverse('post-logout')
POST_LOGOUT_URL = cfgs.get("LOGOUT_REDIRECT")
这是我的 okta oidc 注销端点,我编写的用于创建正确注销 url 和注销重定向的方法。我创建了一个 POST_LOGOUT_URL 变量,这样我就可以在其他地方访问注销后的 url。
openid.logout 看起来像这样
def logout(request):
id_token = str(request.COOKIES['csrftoken'])
logout_request = \
f'{settings.OIDC_OP_LOGOUT_ENDPOINT}?id_token_hint={id_token}' \
f'&post_logout_redirect_uri={settings.POST_LOGOUT_URL}'
return logout_request
哪个是 oidc 的正确注销 url 配置。我已经通过烧瓶应用程序测试了所有这些,并且一切正常。为什么我不直接使用烧瓶?说来话长。我宁愿使用 Django...
在我的views.py中我有
class LogoutView(OIDCLogoutView):
def get(self, request):
return self.post(request)
我承认是从另一个帖子中获取的,但我不完全确定它如何与我的网址一起使用:
urlpatterns = [
path('', views.index, name='index'),
path('login/', views.login, name='login'),
path('post_logout/', views.post_logout, name='post-logout'),
path('logout/', views.LogoutView.as_view(), name='logout'),
path('main_page/', views.main_page, name='main-page'),
]
所以我不完全确定它在 OIDC_OP_LOGOUT_METHOD
的上下文中是如何工作的所以这(错误地)似乎有效。它直接跳转到我的 post_logout 页面,但据我所知,它永远不会执行重定向到实际的 okta 注销 url。果然,实际上没有任何东西被注销。我的应用程序会话似乎认为我已注销,因为我可以返回主页并显示我已注销。但是,如果我单击登录,则不必通过 okta 身份验证。它仍在保留 okta 会话。
所以我的问题是如何让它真正遵循 OIDC_OP_LOGOUT_METHOD 的流程。我知道我的配置不正确,但是通过他们的文档,我能够遵循的关于该主题的指导帮助很少。
提前谢谢你!
【问题讨论】:
标签: django openid-connect okta