java - 管理身份验证 token 的最佳实践

标签 java rest authentication httpclient

我正在使用 HttpCLient 用 Ja​​va 编写一个 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/

相关文章:

java - 使用单个数组实现三个堆栈

java - 在准备语句中使用单个查询插入多个表

克隆实体上的 java.util.ConcurrentModificationException

Asp.Net MVC3 - FormsAuthentication,如何在浏览器关闭时使 cookie 过期?

java - 如何转换 int 以返回字符串,这就是我们所说的 int

spring - Controller 的 ModelAndView 或 ResponseEntity 返回类型?

java - 网络服务+安卓

java - 如何在 spring boot 中拥有线程安全 Controller

android - Phonegap (Android) 上的 ASP.NET 表单例份验证问题

Django:登录用户并在同一页面上刷新而不定义模板?