我使用spring-boot 2来配置我的授权。
使读者熟悉术语:
OAuth2 server - trusted authorization server. One knows all registered clients and keeps under the control all tokens that was produced.
client - any server that uses OAuth2 server as service to verify users permissions, user identifies by oauth token (`access_token`).
user - can be any person or bot that consumes clients services. User should pass registration for any client as example.
我已经配置了OAuth2服务器。我已经配置了资源服务器。我将npm应用程序配置为从资源服务器加载数据。通常,如果用户使用Bearer
令牌订阅消息,则我的资源服务器会提供所需的数据。我可以在documentation之后请求令牌。
总体上似乎没有问题。但是架构还没有完成。由于资源客户端具有自己的client-id
和secret
,因此用户不能直接从OAuth2服务器询问令牌。由于安全性问题,我不能将它们放到网上,因此永远不会对用户client-id
和secret
有所了解。
似乎我需要user
的登录控制器来提供必需的access_token
。规则是:OAuth2 server
不应提供登录页面。
答案 0 :(得分:1)
有问题的解决方法是:
@PostMapping
public ResponseEntity<String> login(
@RequestHeader(value = USERNAME, required = true)String username,
@RequestHeader(value = "secret", required = true)String secret) {
log.info("incoming login request from {} ", username);
MultiValueMap<String, String> bodyParams = new LinkedMultiValueMap();
bodyParams.add(GRANT_TYPE, GRANT_TYPE_PASSWORD);
bodyParams.add(USERNAME, username);
bodyParams.add(PASSWORD, secret);
HttpHeaders headers = new HttpHeaders();
headers.add(CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE);
HttpEntity<String> requestEntity = new HttpEntity(bodyParams, headers);
return authenticateClientTemplate.postForEntity("http://localhost:8082/oauth/token", requestEntity, String.class);
}
但是无论如何,我正在等待优雅的解决方案。