我正在使用 HttpCLient 用 Java 编写一个 REST 客户端,我访问的 REST API 需要一个用于每个 REST 操作的身份验证 token 。此 token 的有效期为 24 小时。
我现在处理这个问题的方式是每次我需要进行 REST 调用时调用“getAuth()
”方法,这似乎是身份验证服务器上的开销。
如何方便地存储此身份验证 token 并管理其生命周期? 是否有任何记录在案的最佳做法?
我想到了以下解决方案
public class MySession {
String user;
String pass;
public MySession(String user, String pass) {
this.user = user;
this.pass = pass;
}
public getAuth() {
//user user, pass to get auth token
}
}
然后将 session 对象传递给任何需要 token 的类。如果token过期了,再次调用这个方法即可
最佳答案
为简洁起见,我假设您正在调用无法更改的端点。您应该如何实现将在很大程度上取决于 token 是基于应用程序还是基于用户(共享应用程序实例上的所有用户一个 token 或每个用户一个 token )。
如果它是整个应用程序的一个身份验证 token :
- 将其与生存时间时间戳一起存储在内存中(或者捕获 token 过期错误,请求新 token 并重试原始请求),如果它不存在/已过期则刷新它
- 如果您担心在应用重启后重新请求 API token ,请将其存储在数据库中并在启动时加载(如果存在)
如果是每个用户一个 token :
- 将其存储在您的用户 session 中,这正是 session 的用途,如果您正在对用户进行身份验证,那么他们将拥有一个 session 并且开销已经存在
- 如果您不想在他们每次登录时重新请求 token ,请将其当前 token 存储在数据库中,并在他们登录时将其加载到 session 中
关于java - 管理身份验证 token 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278683/