1

我正在使用 Spring Boot 编写应用程序网关 (REST-API) 和 Web 应用程序。我有一个包含用户和密码哈希的用户数据库。两个应用程序都将使用相同的用户数据库,因此我希望将它放在一个独立的服务中。我查看了https://spring.io/guides/tutorials/spring-security-and-angular-js/提出了通过 OAuth 使用 Auth 服务器的想法。

我很不确定我的用例的请求流。我认为它将进入 App -> App Gateway(例如登录),然后使用授权类型密码向 /uaa/oauth/token 发出请求(因为我获得了用户凭据)。此请求必须包含 client_id 和 client_secret 并且应该返回一个令牌。

  1. 这个概念对我的用例是否正确?
  2. 如果是这样:我如何配置身份验证服务器以使用数据库而不是基本身份验证?我发现的所有示例在 application.properties 中都有特定的用户/密码组合
  3. 通过用户名 + pw 将 Auth 委托给 Auth 服务器的最惯用的方式是什么?

编辑:我发现这很有帮助:https ://github.com/dsyer/sparklr-boot

现在我可以这样做:

curl -H "Accept: application/json" my-trusted-client@localhost:8080/oauth/token -d grant_type=password -d username=user -d password=password

如何将一些用户后端连接到其中?据我了解,以下使用默认的 Spring Basic Auth 设置。

应用程序.yml:

security:
  user:
    password: password

代码:

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints)
            throws Exception {
        endpoints.authenticationManager(authenticationManager);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        // @formatter:off
        clients.inMemory().withClient("my-trusted-client")
                .authorizedGrantTypes("password", "authorization_code",
                        "refresh_token", "implicit")
                .authorities("ROLE_CLIENT", "ROLE_TRUSTED_CLIENT")
                .scopes("read", "write", "trust").resourceIds("sparklr")
                .accessTokenValiditySeconds(60).and()
                .withClient("my-client-with-registered-redirect")
                .authorizedGrantTypes("authorization_code").authorities("ROLE_CLIENT")
                .scopes("read", "trust").resourceIds("sparklr")
                .redirectUris("http://anywhere?key=value").and()
                .withClient("my-client-with-secret")
                .authorizedGrantTypes("client_credentials", "password")
                .authorities("ROLE_CLIENT").scopes("read").resourceIds("sparklr")
                .secret("secret");
        // @formatter:on
    }

}
4

0 回答 0