我正在基于oauth2.0框架创建受保护的rest apis。
我成功构建了授权服务器和资源服务器。
AuthorizationServer 扩展 AuthorizationServerConfigurerAdapter 并覆盖了一些方法,我遇到了这个扩展方法的问题
public void configure(ClientDetailsServiceConfigurer 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的人是第一个。
请您的回答,并提前致谢。
答案 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());
}
}