Oauth2.0 auhtorization服务器配置

时间:2016-04-19 20:28:04

标签: java spring rest oauth

我正在基于oauth2.0框架创建受保护的rest apis。

我成功构建了授权服务器资源服务器

AuthorizationServer 扩展 AuthorizationServerConfigurerAdapter 并覆盖了一些方法,我遇到了这个扩展方法的问题

  

public void configure(ClientDetailsS​​erviceConfigurer clients)抛出异常{}

以下是解释

当我运行此版本的 config() 授权服务器

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        clients.inMemory().withClient("clientapp").authorizedGrantTypes("password", "refresh_token")
                .scopes("read", "write").resourceIds(RESOURCE_ID).secret("123456");

   }

这个方法很好用,当我要求它时会返回一个access_token。

但是当我使用相同的方法运行一些增强功能时,当我要求access_token但401未经授权的http响应时,我什么都没有。

    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    int n = appMetier.getAppsCount();
    for (App app:appMetier.findAll(0, n).getApps()) {
        clients.inMemory().withClient(app.getClientPublicId()).authorizedGrantTypes("password", "refresh_token")
                .scopes("read", "write").resourceIds(RESOURCE_ID).secret(app.getClientSecretId());
    }
  }

这里的n变量等于17,这意味着我在内存中有17个客户端有权接收access_token。

唯一一个从17获取access_token的人是第一个。

请您的回答,并提前致谢。

1 个答案:

答案 0 :(得分:0)

您多次调用inMemory(),每次都会覆盖构建器服务。它应该只被调用一次。

以下代码应该有效。

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    int n = appMetier.getAppsCount();
    InMemoryClientDetailsServiceBuilder clientBuilder = clients.inMemory();

    for (App app:appMetier.findAll(0, n).getApps()) {
        clientBuilder.withClient(app.getClientPublicId()).authorizedGrantTypes("password", "refresh_token")
            .scopes("read", "write").resourceIds(RESOURCE_ID).secret(app.getClientSecretId());
    }
}