在Spring Security OAuth应用程序中是否有端点可获取已配置的公共证书?

时间:2018-12-01 09:18:46

标签: spring-boot spring-security spring-security-oauth2

在充当Spring Security Oauth的授权服务器的Spring Boot应用程序中,我已经配置了JWT和一个密钥对来对令牌进行签名。

是否存在允许我们获取公共证书的终结点?

3 个答案:

答案 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身份验证进行保护。