我有一个正在运行的授权服务器,并在我的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。这是正确的,还是我没有使用正确的约定?
1条答案
按热度按时间iezvtpos1#
对于“Does Spring Security issuer url support service by name using a discovery-service?“可能不是”如果存在,
issuer-uri
用于两件事: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
中使用的主机名在资源服务器上解析,并且必须可以从那里访问以获取令牌公共签名密钥。