Spring Security oAuth 2.0 UAA自动获取令牌值

时间:2017-10-17 11:46:12

标签: java spring spring-security oauth spring-oauth2

我正在开发一个我需要的项目,不仅要进行身份验证,还要拥有令牌的真正价值。

我们有一个带有oAuth2.0 Spring Security的Spring Boot应用程序,问题是每次调用它时都无法找到一个给我一个有效令牌的方法。

目前,我有一个用Java编写原始编码的post方法,但必须有一个Spring Security实现,它可以执行以下操作:

  1. 第一次调用它时,它会要求令牌并存储它。
  2. 以下时间检查令牌是否已过期,如果已过期,则会要求新令牌。
  3. 我在哪里可以找到它?

    修改

    我的项目中有两个不同的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();
        }
    

1 个答案:

答案 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/