访问OAUTH服务器时如何使用外部网络名称?

时间:2019-03-13 13:41:26

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

我在Spring Boot中实现了OAuth2服务器。

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    //blah blah

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        oauthServer.realm( REALM+"/client" );
        oauthServer.passwordEncoder( passwordEncoder );
        oauthServer.checkTokenAccess( "permitAll()" );
    }

}

在我的开发环境中,它与我的客户(Spring Boot也是如此)一起很好地工作。

现在我需要将所有这些都放置在Docker环境中。如果我在所有配置文件中都使用机器名称(又名docker主机名)作为参考,那么一切运行得很好。我需要做的就是将所有Docker主机名添加到我自己的计算机hosts文件中,我能够使用我的浏览器找到每个人,并且在docker内部,通讯也是使用docker主机名进行的。

当我将OAuth2服务器引用更改为完整域名(例如,从“服务器”更改为“ server.oauth.com”)时,麻烦就开始了。

我只是将主机文件(我的机器)中的“服务器”条目更改为“ server.oauth.com”,并且我的浏览器仍然能够找到OAuth服务器。

嗯,客户端应用程序无法再使用“ / me”端点,因为客户端Docker机器不知道任何“ server.oauth.com”并导致无限重定向到登录端点,因此我的浏览器抱怨“ TOO_MANY_REDIRECTS” ”,然后停止而不登录(在提交登录表单之后)。

这是我的客户端应用程序的application.yml文件:

此配置有效,因为所有计算机都可以解析server。 Docker计算机通过使用内部DNS进行解析,而我的计算机通过使用自己的hosts file来指向Docker主机的IP地址进行解析:

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: cliente01
        clientSecret: secret
        accessTokenUri: http://server:port/oauth/token
        userAuthorizationUri: http://server:port/oauth/authorize
      resource:
        userInfoUri: http://server:port/user/me

该配置无效,因为我可以像以前一样使用hosts文件来解析server.oauth.com,但是Docker机器无法解析它。因此无法找到/me中的userInfoUri端点(客户端计算机在内部使用该端点向服务器询问有关用户数据的信息)

security:
  basic:
    enabled: false
  oauth2:
      client:
        clientId: cliente01
        clientSecret: secret
        accessTokenUri: http://server.oauth.com:port/oauth/token
        userAuthorizationUri: http://server.oauth.com:port/oauth/authorize
      resource:
        userInfoUri: http://server.oauth.com:port/user/me

我已经尝试将映射放入docker run参数--add-host=server.oauth.com:<DOCKER_HOST_IP>中(是的,这使事情开始起作用),但是我担心IP将来会发生变化(如果docker主机更改其IP地址?)。

解决此问题的最佳方法是什么?

0 个答案:

没有答案