使用有效的 JWT 令牌调用经过 keycloak 身份验证的 API

Posted

技术标签:

【中文标题】使用有效的 JWT 令牌调用经过 keycloak 身份验证的 API【英文标题】:Call keycloak authenticated API with valid JWT token 【发布时间】:2020-07-22 06:06:57 【问题描述】:

我创建了一个简单的 Spring Boot 应用程序,我已使用 keycloak 对其进行了身份验证。当我调用服务 (http://localhost:8080/table1data) 时,它会将我重定向到 keycloak login page,我在其中插入我的领域用户名和密码,然后返回数据。现在一切都很好,直到现在。

我想要另一个场景。如果我的用户已经拥有相应领域的有效令牌,并且他想使用正确的令牌访问相同的URL,则不应将用户重定向到 keycloak 登录 page(这是有道理的,因为用户拥有有效的令牌)。如何从我的 Spring Boot 应用程序中创建这个场景?即,将令牌传递给 Spring Boot 服务,该服务从 keycloak 验证此令牌,而不是将我重定向到登录页面。任何帮助或参考在线文章请

我的控制器代码

public class Table1Controller 

    @Autowired
    private ITable1Repository table1Repository;

    @GetMapping("/table1data")
    public List<Table1Entity> getAllTable1Data() 
        return table1Repository.findAll();
    

PS:我使用邮递员生成了令牌(附图片)

【问题讨论】:

【参考方案1】:

您需要在您的 HTTP 请求中添加一个授权请求,以“Bearer my-sample-token”作为值,将您的令牌放在这里。


使用邮递员的示例

在“授权”选项卡中,您需要选择类型 Bearer Token 并在 Token 字段中添加您的访问令牌。

这基本上转化为邮递员发出的 HTTP 请求中的“授权:承载 your-token”标头。相反,我主要使用 Inherit auth from parent 选项,因此如果您使用请求集合,您可以将令牌添加到集合本身,并且集合中的每个请求都会获取它。

如果您正在使用 keycloak 测试服务器,您还可以考虑设置更长的访问令牌寿命,以避免必须如此频繁地获取一个令牌。

【讨论】:

嗨@Xtreme Biker 感谢您的回复,但我想从应用程序本身中完成。不是来自邮递员。我刚刚分享了邮递员图片以表明我已经获取了有效的令牌。现在如何将这个令牌从我的控制器传递给 Keycloak 以访问服务而不重定向到领域登录页面。 你好 Mirza,没关系,但你也得到了你所要求的答复。阅读第二段,您需要在 HTTP 请求中添加授权标头。对于标头值,请将“标头”添加到您的访问令牌。

以上是关于使用有效的 JWT 令牌调用经过 keycloak 身份验证的 API的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak:访问令牌验证端点

使用带有spring security的keycloak JWT令牌时如何修复403

Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性

在 vert.x 中获取用户并验证 JWT 令牌

Spring Security OAuth - 它可以使用 Keycloak 中的 JWT 令牌吗

如何验证在 jwt.io 上使用 Keycloak 身份验证提供程序创建的 HS256 签名 JWT 令牌