[英]How can OAuth2 resource server use endpoint to access public key when I add custom jwt details to the authorization server?
[英]Does I need a spring boot oauth2 authorization server to generate a custom JWT and a JWKS endpoint?
如果有人能帮助我找到最好或最简单的方法,我将不胜感激。
我需要使用 JWT 令牌在我的应用和合作伙伴之间进行通信
步骤如下:
我的主要疑问如下:
一种。 我需要使用 spring oauth2 授权服务器还是可以只使用一些 spring 安全组件来生成令牌并公开 jwks 端点? b. 如果我使用spring oauth2授权服务器,如何自定义/oauth2/token接收用户信息生成token? c。如果我使用 spring oauth2 授权服务器,我如何根植我的公钥? d. 如果我只使用 spring 安全组件,你能分享一些生成 JWT 的教程吗? e. 如果我只使用 spring 安全组件,在端点生成 jwks informatino 会不会很简单?
关于 a) 项
不需要像客户端凭证流这样的授权服务器,我的应用程序可以通过它自己生成 JWT 令牌,我使用 spring 授权服务器只是为了获得所有结构来生成令牌的好处。 利用 spring 引导结构真的有必要还是最好的方法,还是使用一些 spring 安全组件来生成令牌最简单?
关于项目 b)
如果最好的决定是使用 Spring Oauth2 授权服务器,我的想法是将 /oauth2/token 与客户端凭据一起使用,但问题是如果我没有用户,我如何生成带有一些用户特定信息的 JWT 令牌POST /oauth2/token 请求中的信息? 是否可以自定义授权服务器请求以在正文或 header 中接收我需要的信息? 我在谷歌搜索,似乎是可能的。 我只是想确认这样做是可以的。
关于c)项
是否可以在 spring oauth2 授权服务器中不停机地轮换公钥?
该过程是否只是生成一个新的 jks,在服务器指向的路径中更改它并在授权服务器中像 POST /refresh 一样调用?
关于项目 B ,我想出了一个解决方案。
您可以在请求中设置任何其他值
然后您可以自定义令牌 JWT 恢复请求中发送的 custom_value
@Bean
public OAuth2TokenCustomizer<JwtEncodingContext> jwtEncodingContextOAuth2TokenCustomizer(UserRepository userRepository){
return (context -> {
Authentication authentication = context.getPrincipal();
if (authentication.getPrincipal() instanceof String) {
OAuth2AuthorizationGrantAuthenticationToken tok = (OAuth2AuthorizationGrantAuthenticationToken) context.getAuthorizationGrant();
context.getClaims().claim("custom_clain", tok.getAdditionalParameters().get("custom_value"));
}
});
}
然后 output 令牌将具有 claim 自定义值
JWT 已签名,您将公开公钥,所以是的,使用授权服务器颁发令牌并公开密钥,但您不必使用 Spring 的授权服务器:任何严肃的授权服务器都有设置私有声明的机制.
您可以使用任何 OAuth2 授权服务器,但 OIDC 实现将更容易用于其他参与者。
Spring-security 授权服务器的内置功能非常有限。 在做出选择之前,您应该看看其他解决方案。 有很多内部部署(如 Keycloak)或 SaaS(如 Auth0 或你的云提供商建议的任何东西,如果你托管在云中)。
OAuth2 比内部安全有很多优势(这可能是您的合作伙伴要求它的原因)。 我建议您实际上将所有安全性切换到 OAuth2。 选择授权服务器并将其配置为使用现有用户数据库后,请配置:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.