设置 OAuth2 访问令牌的签发时间 (issuedAt) 和过期时间 (expiresAt)

java 复制代码
Instant issuedAt = Instant.now();
Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());

上述代码用于设置OAuth2访问令牌的签发时间和过期时间,主要出现在OAuth2认证和授权过程中,特别是在生成访问令牌时

Instant issuedAt = Instant.now();

  • 获取当前时间,并将其设置为令牌的签发时间(issuedAt)。

Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());

  • 从注册客户端的令牌设置中获取访问令牌的存活时间(AccessTokenTimeToLive)。
  • 将存活时间加到签发时间上,计算出令牌的过期时间(expiresAt)。

使用场景

  1. OAuth2 认证和授权流程
    • 在 OAuth2 认证和授权过程中,当客户端请求访问令牌时,授权服务器会生成一个访问令牌。此时需要确定令牌的签发时间和过期时间,以便设置令牌的有效期。
  2. 令牌管理
    • 在生成和管理 OAuth2 访问令牌时,需要准确记录令牌的签发和过期时间,以便在后续的访问控制和授权检查中使用。这有助于确保令牌在其有效期内使用,避免过期令牌的滥用。
  3. 安全性要求
    • 设定访问令牌的有效期是安全性的重要一环。通过明确的签发时间和过期时间,可以限制令牌的使用期限,降低令牌被滥用的风险。在过期后,客户端需要重新请求新的令牌,从而提高整体系统的安全性。
  4. 自定义令牌生成逻辑
    • 在一些高级应用场景中,可能需要自定义令牌的生成逻辑。例如,在生成 JWT(JSON Web Token)时,需要包含 iat(issued at)和 exp(expiration)字段,以便验证令牌的有效性。

实际应用示例

示例1:OAuth2 认证服务器

在一个 OAuth2 认证服务器中,当用户成功通过身份验证并请求访问令牌时,代码可能如下:

java 复制代码
public OAuth2AccessToken generateAccessToken(OAuth2Authentication authentication) {
    Instant issuedAt = Instant.now();
    Instant expiresAt = issuedAt.plus(tokenSettings.getAccessTokenTimeToLive());
    
    OAuth2AccessToken accessToken = new OAuth2AccessToken(
        OAuth2AccessToken.TokenType.BEARER,
        UUID.randomUUID().toString(),
        issuedAt,
        expiresAt,
        authentication.getScope()
    );

    return accessToken;
}

示例2:自定义令牌生成器

在自定义的令牌生成器中,可以通过注入 RegisteredClient 的设置来定制令牌的有效期:

java 复制代码
public class CustomTokenGenerator implements OAuth2TokenGenerator<OAuth2AccessToken> {

    @Override
    public OAuth2AccessToken generate(OAuth2TokenContext context) {
        RegisteredClient registeredClient = context.getRegisteredClient();
        Instant issuedAt = Instant.now();
        Instant expiresAt = issuedAt.plus(registeredClient.getTokenSettings().getAccessTokenTimeToLive());

        return new OAuth2AccessToken(
            OAuth2AccessToken.TokenType.BEARER,
            UUID.randomUUID().toString(),
            issuedAt,
            expiresAt,
            context.getAuthorizedScopes()
        );
    }
}

总结

这段代码主要用于在生成 OAuth2 访问令牌时设置令牌的签发时间和过期时间,以确保令牌在特定的时间段内有效。它广泛应用于 OAuth2 认证和授权流程中,通过准确设置令牌的有效期,提升系统的安全性和可靠性。

相关推荐
我命由我123453 分钟前
Android WebView - loadUrl 方法的长度限制
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
前端架构师-老李10 分钟前
Maven安装以及环境变量配置(macOS)
java·macos·maven
带刺的坐椅34 分钟前
(对标 Spring IA 和 LangChain4j)Solon AI & MCP v3.7.0, v3.6.4, v3.5.8 发布(支持 LTS)
java·spring·ai·solon·mcp·langchain4j
7澄136 分钟前
深入解析 LeetCode 1572:矩阵对角线元素的和 —— 从问题本质到高效实现
java·算法·leetcode·矩阵·intellij-idea
诗9趁年华40 分钟前
缓存三大问题深度解析:穿透、击穿与雪崩
java·spring·缓存
阳光明媚sunny40 分钟前
分糖果算法题
java·算法
whltaoin41 分钟前
【JAVA全栈项目】弧图图-智能图床SpringBoot+MySQL API接口结合Redis+Caffeine多级缓存实践解析
java·redis·spring·缓存·caffeine·多级缓存
一 乐1 小时前
医疗管理|医院医疗管理系统|基于springboot+vue医疗管理系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·医疗管理系统
华仔啊1 小时前
SpringBoot 2.x 和 3.x 的核心区别,这些变化你必须知道
java·spring boot·后端
laocooon5238578861 小时前
大数的阶乘 C语言
java·数据结构·算法