【发布时间】:2019-12-03 17:38:03
【问题描述】:
我有一个 keycloak docker 容器(提取图像 jboss/keycloak )和一个 Django 2.2 Web 容器。对于 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() 调用的令牌是原始令牌(具体来说,是令牌字典的'refresh_token' 键值)。调用keycloak_openid.refresh_token() 还会发出一个新令牌,该令牌作为注销凭据被拒绝。但是最初发布的 refresh_token 似乎没有存储在任何地方——会话、cookie 或 keycloak db。 (注意:我确实找到了access_token,它在social_auth_usersocialauth 表的django DB 中,但我需要refresh_token)。但是,它在登录时被转储到控制台输出,所以如果我复制它并用它调用keycloak_openid.logout(),它会从 keycoak 注销。问题是我在哪里可以找到原始的 refresh_token?
【问题讨论】:
标签: client token keycloak logout