2

使用浏览器

如果我使用浏览器登录和注销,一切正常

例如。我使用 keycloak 表单登录,然后通过在浏览器中粘贴以下内容注销

{}/oauth/logout?redirect={}/auth/realms/{}/protocol/openid-connect/logout

当我检查 keycloak 管理页面时,会话按预期删除

使用 python 请求会话

我使用以下登录

r = self.session.post(
    "{}/oauth/login".format(self.host),
    data={"username": username, "password": password},
    verify=False
)

这有效,当我尝试访问登录后能够访问的任何端点时

我使用以下方式注销

url = "{}/oauth/logout?redirect={}/auth/realms/{}/protocol/openid-connect/logout".format(
    self.host,
    self.host,
    self.realm_name
)
r = self.session.get(
    url,
    allow_redirects=True,
    verify=False,
)

这会使我退出网守并清除 cookie(我无法访问和端点是正确的),但是在 keycloak 管理页面中,我仍然看到我的会话处于活动状态。

cookie 应该保存在会话中,有人知道为什么吗?谢谢

编辑:

我认为这是因为当我使用端点通过网守登录时

/oauth/login

它不会返回我使用浏览器时获得的这 3 个 cookie

AUTH_SESSION
KEYCLOAK_IDENTITY
KEYCLOAK_SESSION

这 3 个 cookie 来自端点

https://{}/auth/realms/{}/protocol/openid-connect/token

但是,由于我没有通过表单登录,因此我没有这些令牌

4

0 回答 0