繁体   English   中英

使用 Keycloak 进行微服务身份验证

[英]Microservice authentication with Keycloak

我正在尝试在另一个微服务中验证一个微服务请求,但我找不到任何示例来说明如何在 keycloak 中配置客户端以及如何配置 spring 安全性。 这是我要归档的架构:

在此处输入图像描述

我已经设法让用户授权工作并保护微服务 A,现在我正在尝试授权来自微服务 B 的请求,但我不知道该怎么做,是否应该在 keycloak 中为微服务 B 创建一个专用用户,或realm中的客户,或其他一些技术帐户? 它是由一些 api 密钥完成的,还是微服务 B 应该以与用户类似的方式请求访问令牌?

我的想法是在 Keycloak 中为微服务 B 创建一个客户端,从 Keycloak 请求访问令牌并将其附加到发送到微服务 A 的每个请求中。

这是正确的方法吗?

是否有一些图书馆解决这种情况?

我找不到与 spring 进行此类通信的任何示例,您是否知道带有此类示例的任何存储库?

据我了解,您对 MS-A 的前端访问是通过不同的用户帐户(登录名)完成的。 但是对于访问 MS-A 的 MS-B 来说,当 MS-B 始终使用相同的帐户(MS-B 服务帐户)时可以吗?

在这种情况下,我将为此后端身份验证创建第二个客户端,我们将其称为backend-client并使用以下选项:

OIDC,机密,启用直接访问授权和服务帐户,禁用标准流

MS-B 现在可以通过对 Keycloak 的简单请求获得访问令牌

 curl --request POST \
        --url https://keycloak/auth/realms/%realm_name%/protocol/openid-connect/token \
        --header 'Accept: */*' \
        --header 'Content-Type: application/x-www-form-urlencoded' \
        --data 'client_id=backend-client&client_secret=%client_secret%&grant_type=client_credentials'

(不需要用户+密码,所以保持client_secret真的安全)

访问令牌现在需要用于从 MS-B 到 MS-A 的所有请求( Authentication: Bearer %Access-Token%标头)

我不知道有任何 spring 实现/适配器,但我很确定如果您搜索Direct Access Grants ,您会找到合适的解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM