gpt4 book ai didi

java - 从 SAMLAuthenticationToken 创建 JWT 访问 token

转载 作者:行者123 更新时间:2023-11-30 02:00:41 26 4
gpt4 key购买 nike

在我的应用程序中,到目前为止,我已经使用 OAuth2 密码授予流程来生成 JWT 访问 token ,以便客​​户端使用 Spring Security 和 Spring OAuth 提供用户名和密码。然后,他们在对我的 Spring Boot REST API 的所有请求中使用该 token 。

我的一些客户现在希望改用 SAML 身份验证。我的想法是创建一个单独的端点 /saml/accessToken 并使用 Spring SAML 保护它。 SAML 身份验证完成后,用户将被重定向回 /saml/accessToken,现在已进行有效身份验证,并获得一个 JWT,客户端可以使用该 JWT 进一步与我的 REST API 进行通信。

我需要一个 Controller 方法,该方法接受经过身份验证的 SAMLAuthenticationToken,使用其凭据生成 JWT,并将其返回给客户端:

@RequestMapping(value = "/saml/accessToken")
public String getAccessToken(SAMLAuthenticationToken authentication) {
return accessTokenFactory.create(authentication);
}

这是我需要帮助的上面示例中的accessTokenFactory。我希望尽可能遵循 Spring 编码生态系统,避免使用“hack”解决方案,这样我就可以利用已经存在的 TokenEnhancer 等。

<小时/>

从 SAMLAuthenticationToken 创建 JWT 访问 token 的最佳方法是什么?

最佳答案

事实证明,Authentication成功的 SAML 身份验证流程生成的 SAML cookie 对象实际上是 ExpiringUsernameAuthenticationToken ,不是SAMLAuthenticationTokenExpiringUsernameAuthenticationToken#principalUser实现(我们称之为 CustomerUser )我在 SAML 身份验证期间在我的 SAMLUserDetailsService 中设置实现,与 User 类型相同我在 OAuth2 密码授予流程中使用的。

因为我没有找到任何使用默认 Spring OAuth 方式为 ExpiringUsernameAuthenticationToken 创建 JWT 的方法。 ,我最终单独写了一个JwtFactory#create(ExpiringUsernameAuthenticationToken)使用jjwt 。这导致了一个干净且简单的解决方案。

这样做的主要缺点是 JwtFactory无法使用我的TokenEnhancer beans,负责向 JWT 添加附加参数。因此,在 TokenEnhancer 中存在一定程度的代码和逻辑重复,用于添加额外的 JWT 参数。 s(由 Spring OAuth 使用)和 JwtFactory (SAML 身份验证后手动使用)。这是应该避免的代码异味。但是将 Spring OAuth 特定功能黑客到我的自定义中 JwtFactory看起来更糟,所以这是我必须忍受的事情。

关于java - 从 SAMLAuthenticationToken 创建 JWT 访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52947116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com