为什么Keycloak使用Session-Cookie而不是JWT授权标头

问题描述 投票:0回答:1

我正在将 Keycloak 用于微服务架构。 当我想要访问受保护的资源时,我会看到 Keycloak 登录表单并可以登录。登录后我会被重定向到该资源。在请求标头中,我可以看到标头

Cookie: mongo-express=s%3AVpTxrBrZp_bb1kpZOuCo6nitgpTzI0YJ.6OS1ttu4hjcnut%2FG6zdyDnLk2B%2FrEmMEEw9jy2rCUrE; SESSION=510eb294-493e-4cb6-9cb8-1e09604a7fc7
已设置。 当我尝试使用
Authorization: Bearer ...
标头访问资源时(例如,来自带有先前请求的 JWT 的 Postman),我无法访问该资源。相反,我再次看到登录表单。

如何配置 Keycloak 在登录后使用 JWT 而不是标头中的 Session 或至少接受带有不记名令牌的授权标头?

authentication oauth jwt keycloak openid-connect
1个回答
0
投票

你写:

当我想要访问受保护的资源时,我会看到 Keycloak 登录表单并可以登录。登录后我会被重定向到该资源。

这让我假设您正在使用浏览器并发出 GET 请求。我假设浏览器使用的是 OAuth 2.0 授权代码授予类型,因此令牌在客户端(Web 服务器)和 Keycloak 服务器之间交换。并且不是在网络浏览器和网络服务器之间。这是开发“受保护资源”的团队做出的决定,如果不更改“受保护资源”的源代码,则无法更改。

您还写道:

在请求标头中,我可以看到标头

Cookie: mongo-express=s%3AVpTxrBrZp_bb1kpZOuCo6nitgpTzI0YJ.6OS1ttu4hjcnut%2FG6zdyDnLk2B%2FrEmMEEw9jy2rCUrE; SESSION=510eb294-493e-4cb6-9cb8-1e09604a7fc7
已设置。

如果您从头开始浏览器(或使用 Chrome 中的“新隐身窗口”或 Firefox 中的“新私有窗口”),我很确定您会在对受保护的第一个 GET 请求的响应中看到这一点资源,您会在服务器

response
中找到一个 Set-Cookie HTTP 标头(可能是重定向到 OAuth2 服务器的标头)。这正是受保护资源管理其会话的方式。恐怕你对此无能为力。

© www.soinside.com 2019 - 2024. All rights reserved.