使用有效的 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的主要内容,如果未能解决你的问题,请参考以下文章
使用带有spring security的keycloak JWT令牌时如何修复403
Keycloak 客户端映射器将领域名称显示为 JWT 令牌中的单个属性