【问题标题】:oauth2 auto refresh tokenoauth2 自动刷新令牌
【发布时间】:2018-07-26 12:06:06
【问题描述】:

我有一个 spring boot 控制器,它调用 wso2 上的服务。 (发送身份并接收令牌以进行进一步通信)。我正在寻找一种在 spring boot 端自动刷新令牌的方法(因为 wso2 上的服务调用不是由浏览器完成的,而是由另一个服务完成的)。 那么,在 Spring Boot 方面,我该如何实现呢?我知道我应该检查 access_token 的到期日期并使用 refresh_token 接收新的 access_token,但是是否有一些库可以做到这一点,或者我必须自己编写这个逻辑?另外,当在多个 Spring Boot 实例上运行我的应用程序时,如何防止令牌从一个实例刷新并使另一个实例上的令牌无效,使用相同的令牌?

【问题讨论】:

    标签: oauth-2.0 wso2 refresh-token


    【解决方案1】:

    OAuth2 为获取访问令牌提供了五种授权。其中之一是刷新令牌授权,用于在客户端已获得访问权限且令牌已过期后获取新的访问令牌。在刷新令牌授权中,客户端使用以下参数向授权服务器发送POST 请求:

    grant_type=refresh_token&client_id=your_client_id&client_secret=your_client_secret &refresh_token=your_refresh_token_from_the_first_grant

    第一次获取令牌时,auth url 应该相同。对于自动刷新令牌,您可以在访问资源服务器时捕获HttpClientErrorException,并检查状态码是否为HttpStatus.UNAUTHORIZED。如果是,则发送新令牌请求。

    try {
        response = getRestTemplate().exchange...
    } catch (HttpClientErrorException e) {
        if (e.getStatusCode().equals(HttpStatus.UNAUTHORIZED))
            //code to refresh the token or throw custom exception...
    }catch (Exception e) {
        //
    }
    

    对于客户端的多个实例,这可能会对您有所帮助:Spring Oauth2 - multiple tokens per client id

    我还没有验证它,但本质上它使用 post 参数中的范围为相同的 client_id 生成不同的令牌。

    【讨论】:

      猜你喜欢
      • 2022-06-19
      • 2017-04-20
      • 1970-01-01
      • 2017-12-13
      • 2012-07-21
      • 2017-05-29
      • 2016-08-13
      • 2020-01-17
      • 2020-09-16
      相关资源
      最近更新 更多