根据这里和那里的文档,我设法设置了一个授权服务器,该服务器提供使用非对称密钥签名的JWT访问令牌,资源服务器使用公钥的本地副本在本地验证这些令牌。到现在为止,一直都还不错。
我的最终目标是让资源服务器在授权服务器上使用JWKSendpoint,并使用JWT中的“kid”头在JWKS中查找正确的密钥并在本地进行验证,从而支持密钥轮换。我发现了如何使授权服务器公开JWKSendpoint,以及如何为资源服务器指定密钥集uri。
然而,似乎没有办法
有办法做到这一点吗?
当我遇到同样的问题时,我偶然发现了这篇文章。所以我希望它对某些人有用。我不认为这是最好的解决方案,所以也许有人会想出一个更好的答案,我希望像设置一些外部bean的例子。
背景:Jwk存储区正在比较令牌头中的KID与内存中的KID,如果不可用,它将请求已知endpoint
因此,将KID放在JwkSetEndpoint将导致一个json文件,里面有孩子。在这旁边,你需要在jwt令牌的头上得到KID。
我的类中扩展JwtAccessTokenConverter的解决方案
@Override
protected String encode(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
String content = null;
try {
content = objectMapper.formatMap(getAccessTokenConverter().convertAccessToken(accessToken, authentication));
} catch (Exception e) {
throw new IllegalStateException("Cannot convert access token to JSON", e);
}
Map<String, String> headers = getJwtHeader();
String token = JwtHelper.encode(content, signer, headers).getEncoded();
return token;
}
在KID标头旁边,Tokenstore希望将use标头设置为signing。我还必须重写signer对象,因为我被一个hmac签名者而不是所需的RsaSigner卡住了。
我找到了在jwksendpoint中设置孩子的方法:
@FrameworkEndpoint
public class JwkSetEndpoint {
private final KeyPair keyPair;
public JwkSetEndpoint(KeyPair keyPair) {
this.keyPair = keyPair;
}
@GetMapping("/.well-known/jwks.json")
@ResponseBody
public Map<String, Object> getKey() {
RSAPublicKey publicKey = (RSAPublicKey) this.keyPair.getPublic();
RSAKey key = new RSAKey.Builder(publicKey)
.keyID("YOUR_KID_HERE")
.keyUse(KeyUse.SIGNATURE).build();
return new JWKSet(key).toJSONObject();
}
}
我没有找到的是在JWT的标题中设置它的方法。
我在下面设置Spring配置: 和Maven设置如下:
尝试使用 Spring 授权服务器实现 OAuth2 协议。使用以下配置创建了一个简单的应用程序。 调用以下endpoint时: 我得到这些: 我正在尝试通过身份验证并尝试遵循此文档。我尝试了多个电话,其中之一是: 我大部分时间都是带着不同的信息返回401。我真的想不出在哪里可以找到一些带有示例的文档,因为我能够找到的示例对我的用例没有什么帮助。我不完全理解如果客户端是前端应用程序,我将如何验证和
我有一个Spring启动应用程序,我想结合我自己的和远程的OAuth2授权服务器(谷歌,脸书等)加上基本身份验证。 我想要: 常规登录/密码流程(通过电子邮件确认)访问除 /api以外的任何url OAuth2访问 /api网址 SSO(谷歌、Facebook…) 我有单点登录的问题。我希望它的工作原理是这样的:当用户成功授权时,我将获得电子邮件地址,然后如果它还没有存在于我的应用程序中,我将注册
因此,为了简单起见,我只是将添加到MyWebSecurity类的方法中,这解决了选项请求的问题,但因此POST请求不再起作用,而且(同时使用curl)。 我试图找出是否必须以某种方式连接MyWebSecurity类和AuthServer,但没有任何运气。原始示例(开头的链接)也注入了authenticationManager,但这对我没有什么改变。
我需要了解在我的项目范围内使用autheorizaion服务器的便利性。 我们正在实现我们的服务并将其部署到客户环境中。 客户基础结构已经提供了一种身份验证机制,以便对用户进行身份验证。 此机制拦截所有通信并将用户重定向到“登录”表单。 之后,用户被重定向到我们的服务,我们必须处理和消化它,并使用JWT令牌进行响应。 这是我感到迷茫的地方: 我在想: 使用Spring oauth2 向授权服务器请
我已经创建了单独的spring boot oAuth2单独的服务器,并通过使用下面的配置在单独的REST API项目中使用secure。除了这个标签@preauthorize(“hasauthority('user')”)之外,一切都很好。它不起作用 YML配置:安全性:oauth2:resource:token-info-uri:http://127.0.0.1:9191/oauth/check