【问题标题】:Keycloak authentication flow in a microservices based environment基于微服务的环境中的 Keycloak 身份验证流程
【发布时间】:2020-05-25 22:43:51
【问题描述】:

我想在基于微服务的环境中使用 Keycloak,其中身份验证基于 OpenID 端点 REST 调用(“/token”,不重定向到 keycloak 登录页面),我想到的流程是这样的:
1. 前端 SPA 从“/token”端点检索令牌并存储在浏览器的 localStorage 中,然后随每个请求一起发送。

2.网关级认证:Acess Token从前端传递给网关,网关咨询Keycloak服务器检查该token是否仍然有效(未被注销端点调用失效)。

3.基于微服务的授权:Acess Token从网关传递到微服务,使用Spring Boot适配器,微服务离线检查令牌的签名(仅承载客户端?)然后根据令牌中的角色进行授权.

我的问题是:这个流程是否有意义,或者你能建议另一个流程吗?使用什么类型的 Keycloak 客户端?使用 Spring Boot Adapter 传递令牌的理想方法是什么,首先应该这样做吗?请记住,我不是 Keycloak 专家,我已经进行了研究,但仍有疑问。

【问题讨论】:

标签: spring-boot authentication microservices openid keycloak


【解决方案1】:

你的前端 SPA 应该是 public-client,springboot 微服务应该是 Bearer only Client,Gateway 可以是 Confidential Client。

您可以查看 Keycloak 提供的 oidc adapters。对于 springboot,您使用 keycloak 提供的适配器

使用api网关的类似解决方案讨论here

【讨论】:

  • 没错,这就是我想做的。我有一些问题: 1. 为什么我需要一个用于 SPA 的公共客户端,因为我将使用 OID '/token' 端点来检索令牌(没有重定向到 keycloak 登录页面,我会自己制作) 2. 我知道微服务只是不记名的,因此令牌的签名是离线验证的,但是对于网关,它是否必须通过登录 KC 服务器来检查令牌是否未被“无效”每个请求,这很多吗?你分享的帖子并没有真正解决我的问题。
  • 如果您不使用公共客户端,您将如何以及在何处将客户端密码存储在您的 SPA 中?网关可以验证从 SPA 收到的 JWT 上的签名。
  • 我将机密客户端的秘密存储在 SPA 的配置文件中。根据您的回复,我认为这是一种不好的做法。
  • 不推荐用于可通过 Internet 访问的应用程序。
猜你喜欢
  • 2021-04-26
  • 2021-03-31
  • 2018-07-17
  • 2021-08-13
  • 2021-06-20
  • 2020-09-25
  • 2019-12-09
  • 1970-01-01
  • 2019-09-19
相关资源
最近更新 更多