在充当Spring Security Oauth的授权服务器的Spring Boot应用程序中,我已经配置了JWT和一个密钥对来对令牌进行签名。
是否存在允许我们获取公共证书的终结点?
答案 0 :(得分:0)
这里是:/oauth/token_key
为了允许未经身份验证的访问,我们需要添加以下内容:
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
...
@Override
public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
security.tokenKeyAccess("isAnonymous()");
}
...
}
答案 1 :(得分:0)
您可以使用.well-known
发现端点来获取有关所有端点,签名算法等的详细信息。
答案 2 :(得分:0)
您已经写了一个自我解答,但也许参考可能会有所帮助,请参见OAuth 2 Developers Guide:
JWT令牌
[...]令牌是默认签名的,资源服务器还必须能够验证签名,因此它要么需要与授权服务器相同的对称(签名)密钥(共享密钥,要么是对称密钥)密钥),或者它需要与授权服务器中的私钥(签名密钥)匹配的公钥(验证者密钥)(公私钥或非对称密钥)。授权服务器在
/oauth/token_key
端点上公开公用密钥(如果可用),默认情况下,使用访问规则“ denyAll()”来保护该公用密钥的安全。您可以通过在AuthorizationServerSecurityConfigurer
中插入标准SpEL表达式来打开它(例如,“ permitAll()”由于是公共密钥而已足够)。
和
@Override public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception { oauthServer.tokenKeyAccess("isAnonymous() || hasAuthority('ROLE_TRUSTED_CLIENT')").checkTokenAccess( "hasAuthority('ROLE_TRUSTED_CLIENT')"); }
在此示例中,我们同时配置了
/oauth/check_token
端点和/oauth/token_key
端点(因此受信任的资源可以获得用于JWT验证的公钥)。这两个端点通过使用客户端凭据的HTTP Basic身份验证进行保护。