OAuth2RefreshTokenGenerator.kt
package io.github.lishangbu.avalon.oauth2.authorizationserver.token
import io.github.lishangbu.avalon.oauth2.authorizationserver.keygen.UuidKeyGenerator
import org.springframework.security.crypto.keygen.StringKeyGenerator
import org.springframework.security.oauth2.core.OAuth2RefreshToken
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenContext
import org.springframework.security.oauth2.server.authorization.token.OAuth2TokenGenerator
import java.time.Instant
/**
* 刷新令牌生成器
*
* 基于 UUID 生成 refresh token
*/
class OAuth2RefreshTokenGenerator : OAuth2TokenGenerator<OAuth2RefreshToken> {
/** 刷新令牌生成器 */
private val refreshTokenGenerator: StringKeyGenerator = UuidKeyGenerator()
/** 生成刷新令牌 */
override fun generate(context: OAuth2TokenContext): OAuth2RefreshToken? {
if (OAuth2TokenType.REFRESH_TOKEN != context.tokenType) {
return null
}
val issuedAt = Instant.now()
val expiresAt = issuedAt.plus(context.registeredClient.tokenSettings.refreshTokenTimeToLive)
return OAuth2RefreshToken(refreshTokenGenerator.generateKey(), issuedAt, expiresAt)
}
}