auth/jwt/option.go
2025-01-11 00:42:32 +03:00

91 lines
2.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package jwt
import (
"encoding/base64"
"encoding/hex"
"time"
"github.com/gofrs/uuid"
)
type Option func(*Token)
// WithIssuer устанавливает идентификатор принципала, выдавшего JWT (string, URL)
func WithIssuer(iss string) Option {
return func(t *Token) {
t.Payload.AppendArg("iss", iss)
}
}
// WithSubject устанавливает идентификатор принципала, который является предметом JWT (string, URL)
func WithSubject(sub string) Option {
return func(t *Token) {
t.Payload.AppendArg("sub", sub)
}
}
// WithAudience устанавливает идентификатор получателей, для которых предназначен JWT
func WithAudience(aud ...string) Option {
return func(t *Token) {
if len(aud) == 1 {
t.Payload.AppendArg("aud", aud[0])
return
}
t.Payload.AppendArg("aud", aud)
}
}
// WithExpirationTime устанавливает время истечения срока действия, по истечении которого JWT НЕ ДОЛЖЕН быть принят к обработке
func WithExpirationTime(exp time.Time) Option {
return func(t *Token) {
t.Payload.AppendArg("exp", exp)
}
}
// WithNotBefore устанавливает время, до которого JWT НЕ ДОЛЖЕН быть принят к обработке
func WithNotBefore(nbf time.Time) Option {
return func(t *Token) {
t.Payload.AppendArg("nbf", nbf)
}
}
// WithIssuedAt устанавливает время, когда был создан JWT
func WithIssuedAt(iat time.Time) Option {
return func(t *Token) {
t.Payload.AppendArg("iat", iat)
}
}
// WithIssuedAtNow устанавливает текущее время создания JWT
func WithIssuedAtNow() Option {
return func(t *Token) {
t.Payload.AppendArg("iat", time.Now())
}
}
// WithIssuedAt устанавливает уникальный идентификатор для JWT
func WithJwtId(jti string) Option {
return func(t *Token) {
t.Payload.AppendArg("jti", jti)
}
}
// WithGenJwtId генерирует уникальный идентификатор для JWT (uuid v7)
func WithGenJwtId() Option {
return func(t *Token) {
jti := hex.EncodeToString([]byte(time.Now().String()))
if val, err := uuid.NewV7(); err == nil {
jti = val.String()
}
t.Payload.AppendArg("jti", jti)
}
}
// WithHeaderKeyId устанавливает в заголовке параметр kid
func WithHeaderKeyId(kid []byte) Option {
return func(t *Token) {
t.Header.AppendArg("kid", base64.RawURLEncoding.EncodeToString(kid))
}
}