首页 > 解决方案 > 如何在前端访问安全的 API?

问题描述

互联网上有很多很好的内容解释了如何使用 Keycloak 保护 Spring API:在 Keycloak 中创建一个代表 API 服务的客户端,并使用如下链接来获取访问和刷新令牌:

<Domain>/auth/realms/<realm>/protocol/openid-connect/auth/{some parameters}

这会产生两个令牌。到目前为止,一切都很好。

但是,现在我不确定前端访问 API 的流程应该是什么样子。

我想我要问的主要问题是,客户端/用户是否应该获得刷新令牌。

如果需要根据第二个选项实现逻辑,我会对如何在 Spring 中完成这样的事情的链接或描述感兴趣。

标签: spring-bootauthenticationkeycloakkeycloak-rest-api

解决方案


我认为,无论哪种情况,您都需要使用授权代码流。不得再使用以前版本的 OAuth2 中建议用于 SPA(没有后端服务器的前端)的隐式流。

最好的选择是拥有一个后端服务器,因此用户通过重定向检索身份验证代码,后端服务器将此身份验证代码与访问和刷新令牌交换(并保留它们而不将它们转发到前端)。

如果没有适当的后端并且您的前端需要直接检索和保存令牌,我建议将授权代码流与公共客户端和 PKCE 扩展一起使用(简单地说,它可以确保请求身份验证的实体代码与请求令牌的实体相同,并且验证码没有被外国实体窃取和使用)。有几个来源具有更详细的解释,可能会对您有所帮助,例如:https ://auth0.com/docs/flows/authorization-code-flow-with-proof-key-for-code-exchange-pkce

希望这对您的架构考虑有所帮助。


推荐阅读