繁体   English   中英

我是否需要 spring 引导 oauth2 授权服务器来生成自定义 JWT 和 JWKS 端点?

[英]Does I need a spring boot oauth2 authorization server to generate a custom JWT and a JWKS endpoint?

如果有人能帮助我找到最好或最简单的方法,我将不胜感激。

我需要使用 JWT 令牌在我的应用和合作伙伴之间进行通信

步骤如下:

  1. 用户已经在 MyApp 中使用另一个用户凭据解决方案进行了身份验证
  2. MyApp 应该生成一个 JWT 令牌,其中包含一些用户信息,例如订阅 ID
  3. MyApp 使用 JWT 令牌重定向到合作伙伴 url
  4. 合作伙伴使用公钥(必须在 JWKS 端点中公开)来验证 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM