Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JWT签名';s在资源服务器端的验证_Spring_Oauth 2.0_Jwt_Spring Security Oauth2 - Fatal编程技术网

Spring JWT签名';s在资源服务器端的验证

Spring JWT签名';s在资源服务器端的验证,spring,oauth-2.0,jwt,spring-security-oauth2,Spring,Oauth 2.0,Jwt,Spring Security Oauth2,根据和,有两种方法验证JWT令牌: 使用基本上调用oauth服务器的/check\u token端点的RemoteTokenServices,检索整个令牌并对其进行比较 在oauth服务器上公开公钥,并在资源服务器上验证JWT的签名 开始时,我尝试了第一种方法,但由于我使用自定义令牌转换器,每次生成令牌时都会访问数据库,因此我决定切换到资源端的签名验证-不希望每个客户端请求都获得额外的数据库调用 经过一些调查,我意识到ResourceServerTokenServices(接口描述了令牌检索、转

根据和,有两种方法验证JWT令牌:

  • 使用基本上调用oauth服务器的
    /check\u token
    端点的
    RemoteTokenServices
    ,检索整个令牌并对其进行比较
  • 在oauth服务器上公开公钥,并在资源服务器上验证JWT的签名
  • 开始时,我尝试了第一种方法,但由于我使用自定义令牌转换器,每次生成令牌时都会访问数据库,因此我决定切换到资源端的签名验证-不希望每个客户端请求都获得额外的数据库调用


    经过一些调查,我意识到
    ResourceServerTokenServices
    (接口描述了令牌检索、转换和生成有效的
    OAuth2Authentication
    对象)只有两种默认实现:
    DefaultTokenServices
    ,主要用于oauth和资源服务器是同一应用程序的一部分;以及第一种方法中描述的
    RemoteTokenServices


    所以主要的问题是
    spring-oauth2
    是否真的没有JWT签名验证的默认实现,或者我只是找不到一个?

    您不需要特定于JWT的
    ResourceServerTokenServices
    ,所以
    DefaultTokenServices
    应该可以。大多数特定于实现的详细信息都会发送到存储,因此只要正确配置了
    JwtTokenStore
    ,就不会出现问题

    :

    资源服务器还需要能够解码令牌,以便JwtTokenStore依赖于JwtAccessTokenConverter,授权服务器和资源服务器都需要相同的实现。默认情况下,令牌是经过签名的,并且资源服务器还必须能够验证签名,因此它要么需要与授权服务器相同的对称(签名)密钥(共享密钥或对称密钥),要么需要与授权服务器中的私钥(签名密钥)匹配的公钥(验证器密钥)(公钥-私钥或非对称密钥)。公钥(如果可用)由/oauth/token_key端点上的授权服务器公开


    您可以扩展JwtAccessTokenConverter,以便在授权服务器访问公开公钥后进行访问。

    DefaultTokenServices
    假设oauth和资源服务器都可以访问相同的数据源。在我的情况下,双方都是分离的应用程序。您认为DefaultTokenServices为什么会尝试访问任何数据源使用tokenStore来处理令牌。如果tokenStore是JWTTokenStore,则解码令牌应该不会有问题。这与解码令牌无关,它们没有加密))问题是:哪个spring的类可以进行资源端JWT签名验证?我同意我可以使用
    JwtTokenStore
    ,但在这种情况下,我必须在初始化时提供一个
    JwtAccessTokenConverter
    实例,并提供适当的公钥/私钥,这是我不想做的。。我想在flyExtend
    JwtAccessTokenConverter
    上获取公钥,并在运行时获取公钥。您找到解决方案了吗?我也在努力用Spring Oauth JWT令牌检查签名。@dplesa我找到了。实际上我用了克里斯蒂安·塞维斯库的答案