我正在开发一个我需要的项目,不仅要进行身份验证,还要拥有令牌的真正价值。
我们有一个带有oAuth2.0 Spring Security的Spring Boot应用程序,问题是每次调用它时都无法找到一个给我一个有效令牌的方法。
目前,我有一个用Java编写原始编码的post方法,但必须有一个Spring Security实现,它可以执行以下操作:
我在哪里可以找到它?
修改
我的项目中有两个不同的Spring实例:授权服务器 - Cloud Foundry UAA服务器 - 和资源服务器 - 请求令牌并由我编码。
授权服务器在JWT版本中使用AuthorizationServerTokenServices,当资源服务器从那里获取令牌时,我希望它被保留,不仅要解码和使用,因为我需要将它发送到另一台服务器。
此外,我的应用程序不是Web应用程序,因此没有登录页面登录Facebook,我必须使用客户端凭据授权类型获取令牌。
就我而言,单点登录是不可能的,因为我必须使用它而不是解码。
这是我目前的实施:
public String obtainAccessToken() throws ClientProtocolException, IOException {
HttpClient httpclient = HttpClients.createDefault();
String userPass64 = new String("User and password");
HttpPost httppost = new HttpPost("localhost:8080/uaa/oauth/token?grant_type=client_credentials");
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded");
httppost.setHeader("Authorization", "Basic " + userPass64);
//Execute and get the response.
HttpResponse response = httpclient.execute(httppost);
String responseBody = EntityUtils.toString(response.getEntity());
ObjectMapper mapper = new ObjectMapper();
TokenMessage tokenMessage = mapper.readValue(responseBody, TokenMessage.class);
return tokenMessage.getAccess_token();
}
答案 0 :(得分:0)
从我所看到的是,Spring安全性可以通过几种不同的方式来处理这个问题。
默认方法是让 AuthorizationServerTokenServices 接口处理它。有了它,您可以使用不同的方式存储令牌。例如 JDBCTokenStore , InMemoryTokenStore 和 JwtTokenStore 。有关此内容的更多信息,请访问:http://projects.spring.io/spring-security-oauth/docs/oauth2.html#managing-tokens
但是由于我不知道你正在创建什么样的应用程序,你可以开发一个单点登录功能,让Facebook,例如,处理身份验证令牌。关于Spring引导的相当好的教程可以在这里找到:https://spring.io/guides/tutorials/spring-boot-oauth2/