Spring Security issuer url是否支持使用discovery-service按名称提供服务?

thigvfpy  于 2023-08-05  发布在  Spring
关注(0)|答案(1)|浏览(139)

我有一个正在运行的授权服务器,并在我的Eureka 发现服务上注册了名称为authorization-server。对于我的一个微服务,我使用spring-security的授权服务器名称,如下所示:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: http://authorization-server

字符串
当我调用这个具有上述配置的微服务时,当我发送jwt声明时,我会得到这个错误:

Caused by: java.net.UnknownHostException: Failed to resolve 'authorization-server' [A(1), AAAA(28)] after 12 queries


我似乎无法使用可发现的服务名称作为发布者URL。这是正确的,还是我没有使用正确的约定?

iezvtpos

iezvtpos1#

对于“Does Spring Security issuer url support service by name using a discovery-service?“可能不是”如果存在,issuer-uri用于两件事:

  • 向JwtDecoder添加一个颁发者验证器。这个验证器将要求访问令牌iss声明与您在conf中定义的完全相同(即使是尾部斜杠,如果有的话,也很重要)
  • 如果缺少jwk-set-uri属性,则尝试获取OpenID配置(在像{issuer-uri}/.well-known/openid-configuration这样的URI处),然后从它在此conf中找到的端点获取JWK-set。

因此,除非授权服务器在发现服务中使用其名称来设置其发出的访问令牌中的iss声明,否则您不能在Sping Boot 配置中使用此名称作为issuer-uri
给定您当前的conf(没有jwk-set-uri),使用“public”名称作为授权服务器应该可以解决您的问题。您可以在任何访问令牌中找到此URI(https://jwt.io可以帮助您读取访问令牌有效负载)。
但实际上有三种选择:

  • 如果您对颁发者验证不感兴趣,则忽略issuer-uri属性,只定义jwk-set-uri
  • 您希望颁发者验证和资源服务器可以使用访问令牌的iss声明中的URI到达授权服务器,然后使用该URI在conf中设置issuer-uri(并且,如果您的授权服务器是OIDC,请在conf中省略jwk-set-uri,它将被自动解析)
  • 您希望颁发者验证,但资源服务器无法使用访问令牌的iss声明中的URI访问授权服务器,则无论如何都要使用该URI在conf中设置issuer-uri,并设置jwk-set-uri

当设置(最后两种情况)时,jwk-set-uri中使用的主机名在资源服务器上解析,并且必须可以从那里访问以获取令牌公共签名密钥。

相关问题