包含KeycloakOpenID:Logout的Python-keyshaak包不起作用 [英] python-keycloak package with KeycloakOpenID : logout does not work

查看:20
本文介绍了包含KeycloakOpenID:Logout的Python-keyshaak包不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个密钥遮盖停靠容器(拉出的图像joss/keyloak)和一个Django 2.2web容器。对于Django与KeyCloak的集成,使用social-auth-app-django。登录工作正常。现在尝试按照以下说明使用python-keycloak实现注销:

https://github.com/marcospereirampj/python-keycloak

   from keycloak import KeycloakOpenID

    keycloak_openid = KeycloakOpenID(server_url="http://<my IP>:8080/auth/",
                        client_id="<client_id>",
                        realm_name="<my realm name>",
                        client_secret_key="<my secret>",
                        verify=True)
    config_well_know = keycloak_openid.well_know()
    token = keycloak_openid.token("<username>", "<password>")
    print(token) # all tokens returned ok

    userinfo = keycloak_openid.userinfo(token['access_token'])
    print ("userinfo:", userinfo) # userinfo returned ok 

    keycloak_openid.logout(token['refresh_token'])

在容器日志中: Some clients have been not been logged out for user <username> in <my realm name> realm: <client_id> 未注销,仍可以浏览网站。

丢失了什么?谢谢

更新 也许我明白问题所在。我从keycloak_openid.token()调用中获得的令牌不是登录时为我生成的令牌。可以提供给keycloak_openid.logout()调用以使其工作唯一令牌是原始令牌(具体地说,是令牌DICT的‘REFRESH_TOKEN’密钥值)。调用keycloak_openid.refresh_token()还会发出一个新令牌,该令牌作为注销凭据被拒绝。但是最初发出的REFRESH_TOKEN似乎没有存储在任何地方-会话、cookie或密钥罩数据库。(注意:我确实找到了access_token,它在social_auth_usersocialauth表的Django DB中,但我需要refresh_token)。但是,它在登录时被转储到控制台输出,所以如果我复制它并用它调用keycloak_openid.logout(),它就会从keycoak注销。问题是在哪里可以找到原始REFRESH_TOKEN?

推荐答案

我以前也遇到过同样的问题。有帮助的是

  1. 转到admin页面并将您的用户定位到realm
  2. 打开浏览器的开发者控制台,监控networks
  3. 转到密钥罩上的sessions选项卡,然后单击log out
  4. 观察正在调用的终结点,并在您的python后端中模拟该终结点,并在请求中使用适当的标头。

希望这能有所帮助!

这篇关于包含KeycloakOpenID:Logout的Python-keyshaak包不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆