Spring security 通过Eureka发现Oauth服务器

Spring security 通过Eureka发现Oauth服务器,spring-security,spring-boot,spring-cloud,Spring Security,Spring Boot,Spring Cloud,查看以下示例,授权/身份验证服务器的URL在application.yml中预定义 问题是,如果我的体系结构中有配置服务器和eureka,那么SSO服务是否可以通过eureka发现authserver,而不是在配置文件中预定义它 我尝试使用服务名而不是localhost:8080来更改配置文件。它不起作用 oauth2: client: tokenUri: http://authserver/uaa/oauth/token authorizationUri

查看以下示例,授权/身份验证服务器的URL在application.yml中预定义

问题是,如果我的体系结构中有配置服务器和eureka,那么SSO服务是否可以通过eureka发现authserver,而不是在配置文件中预定义它

我尝试使用服务名而不是localhost:8080来更改配置文件。它不起作用

oauth2:
    client:
        tokenUri: http://authserver/uaa/oauth/token
        authorizationUri: http://authserver/uaa/oauth/authorize
        clientId: acme
        clientSecret: acmesecret
     resource:
        jwt:
             keyUri: http://authserver/uaa/oauth/token_key
             id: openid
             serviceId: ${PREFIX:}resource
按照同样的思路,我可以通过配置服务器直接填充公钥,而不是向JWT提供keyUri吗?语法是什么


编辑:经过更多的测试,tokenUri和authorizationUri似乎很容易被发现。我可以使用服务名而不是localhost:8080。现在唯一的问题是如何处理keyUri。

问题解决了。根据上面的编辑,tokenUri和authorizationUri是可发现的。我没有使用keyUri,而是使用keyValue。这样,SSO服务器就不需要连接到Oauth服务器来传送密钥。然后,我使用配置服务器以填充任何其他值的方式填充keyValue。这使得我的授权服务器完全可以被发现。

如果这真的有效,我很乐意更新示例并添加一些文档。不过,我想先确认一下:我希望只有在使用SpringCloud功能区支持的RestTemplate时,使用服务名而不是主机名才能起作用。但是SSO特性依赖于使用由Spring OAuth构建的OAuth2RestTemplate,因此我不明白这是如何了解负载平衡器的。我刚刚再次测试了它,它似乎工作得很好。现在,我的POM与github中的POM有很大不同。更改依赖项是否足以迫使SSO使用RestTemplate而不是OauthRestTemplate?如果是这样,那可能就是原因。我无法想象这会有什么帮助。你能分享你的项目吗?好的。让我想办法分享。现在@enableAuth2sso和RestTemplate实际上遇到了一个问题。一旦将该注释添加到项目中,Spring就开始抱怨无法自动关联RestTemplate。不确定这是否相关。我也可以得到来源的邀请吗。发现authserver时出现问题。我只是得到错误的DNS错误,就像它没有试图查找它。