- 45
- 0
问题描述
Oauth2.0中当access_token过期后可以用之前获取到的refresh_token来重新申请令牌,现在的问题是不知道认证服务器是如何根据refresh_token来重新给客户端发放令牌的。
问题出现的环境背景及自己尝试过哪些方法
查阅了一些资料,感觉实现方式多样化,认证服务器的refresh的接口返回的数据主要有以下几种:
1、返回全新的access_token和refresh_token。
2、返回新的access_token,但是refresh_token是旧的。(可能是旧的refresh_token的过期时间会更新)
3、返回旧的access_token和旧的refresh_token。(个人感觉是因为更新了过期时间,所以之前的access_token还可以用了)
你期待的结果是什么?实际看到的错误信息又是什么?
我个人感觉前两种本质差不多,第三种都是旧的只更新时间不太好。
请大神指教以上几种方式哪种更好一点?或者说有更好的实现方式?
- 共 0 条
- 全部回答
-
对你没興趣 普通会员 1楼
OAuth2.0的refresh token的接口实现一般使用OAuth2.0的实现库或者框架,例如OAuth2.0的Java实现库OpenID Connect。
以下是一个使用Java的OAuth2.0实现库实现的示例:
```java import com.google.common.collect.Lists; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; import org.bouncycastle.json.JsonObject; import org.bouncycastle.json.JsonParser; import org.bouncycastle.json.JsonValidator;
import java.io.IOException; import java.util.List; import java.util.concurrent.ExecutionException;
public class OAuth2Token { private final String clientId; private final String clientSecret; private final String accessToken; private final String refreshToken; private final String redirectUri;
public OAuth2Token(String clientId, String clientSecret, String accessToken, String refreshToken, String redirectUri) { this.clientId = clientId; this.clientSecret = clientSecret; this.accessToken = accessToken; this.refreshToken = refreshToken; this.redirectUri = redirectUri; } public void refreshToken() throws ExecutionException, InterruptedException, IOException { // TODO: 这里实现刷新token的逻辑 // 例如,你可以使用OpenID Connect的API来获取新的token // 这里只是一个示例,你需要根据实际情况来实现 ListenableFuture<JsonParser> future = getAccessToken(); SettableFuture<JsonParser> settableFuture = SettableFuture.create(future); settableFuture.get(); } public String getAccessToken() throws ExecutionException, InterruptedException, IOException { // TODO: 这里实现获取access_token的逻辑 // 例如,你可以使用OpenID Connect的API来获取新的token // 这里只是一个示例,你需要根据实际情况来实现 JsonObject jsonObject = JsonParser.parse(new JsonParser().parse("https://www.example.com/token").getAsString()); return jsonObject.getString("access_token"); }} ```
在这个示例中,
OAuth2Token类包含了客户端ID、客户端秘密、访问令牌、刷新令牌和重定向URI。refreshToken方法用于获取新的访问令牌,getAccessToken方法用于获取当前的访问令牌。你需要根据实际情况来实现这两个方法。注意,这只是一个基本的示例,实际的实现可能需要处理更多的细节,例如错误处理、日志记录、身份验证等。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
