如何解决Mozilla Django OpenID 注销不会撤销令牌
我一直在努力将 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 的流程。我知道我的这个配置不正确,但是我能够遵循他们的文档对这个主题的指导帮助很少。
先谢谢你!
解决方法
所以我整理了一下。 从导入的 url 调用注销,因此我不需要指定不同的注销 url。我删除了它,但它仍然不起作用。
但是OIDC_OP_LOGOUT_METHOD 是不正确的。它必须是 OIDC_OP_LOGOUT_URL_METHOD
这让一切正常。
糟糕...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。