我正在编写一个Sping Boot Shell应用程序,它应该访问一个受keycloak保护的REST API。在Web应用程序中,一切都很好。浏览器将我重定向到keycloak,然后keycloak返回到我的应用程序,瞧,我通过了身份验证。
但在没有浏览器的Cli/Shell应用程序中,这似乎是不可能的。
我只想获得一个访问令牌,将其附加到每个REST请求。就像这样:
POST {{realmUri}}/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
Accept: application/json
grant_type=password
&username={{username}}
&password={{userPassword}}
&client_id={{clientId}}
&client_secret={{clientSecret}}
&scope=openid+phone
返回访问令牌的。如何通过Spring Security OAuth实现这一点。“资源所有者密码流”应该是正确的事情,但它没有实现。
但我认为这一定是可能的。
也许OAuth2 LoginAuthenticationProvider可以完成这项工作。
3条答案
按热度按时间ulydmbyx1#
您可以使用Sping Boot 中的RestTemplate向Keycloak令牌端点发送POST请求,并提供必要的参数(grant_type、username、password等),然后从响应中提取访问令牌,并将其作为身份验证的承载令牌附加到REST API请求。
pftdvrlh2#
我找到了一个解决方案,当然这种方式是弃用。有更好的主意吗?我怎样才能用不被弃用的类实现同样的目标呢?
以及application.properties:
azpvetkf3#
这是我的最终解决方案: