微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mozilla Django OpenID 注销不会撤销令牌

如何解决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 举报,一经查实,本站将立刻删除。