文件

設定

goJwt.Config 上的所有開關 — Redis、PEM 金鑰、Option 預設、Cookie 屬性與 CheckAuth

Config 結構

欄位 型別 必要 說明
Redis Redis Redis 連線設定
File *File PEM 金鑰檔案路徑
Option *Option Token 參數調整
Cookie *Cookie Cookie 屬性設定
CheckAuth func(Auth) (bool, error) 自訂使用者驗證回呼

Redis 設定

欄位 型別 必要 說明
Host string Redis 主機位址
Port int Redis 連接埠
Password string Redis 密碼
DB int Redis 資料庫編號

Option 預設值

欄位為零值或空字串時,由 validOptionData 套用:

欄位 預設 說明
AccessTokenExpires 15m Access Token 有效期限
RefreshIdExpires 7d Refresh ID 有效期限
AccessTokenCookieKey access_token Access Token Cookie 鍵名
RefreshIdCookieKey refresh_id Refresh ID Cookie 鍵名
MaxVersion 5 重建 Refresh ID 前的刷新次數
RefreshTTL 0.5 觸發 Refresh ID 重建的 TTL 比例門檻
PrivateKey 內嵌私鑰 PEM 文字
PublicKey 內嵌公鑰 PEM 文字
欄位 型別 預設 說明
Domain *string Cookie 網域
Path *string / Cookie 路徑
SameSite *http.SameSite Lax SameSite 屬性
Secure *bool false 僅 HTTPS
HttpOnly *bool true HttpOnly 旗標

PEM 金鑰

支援三種設定方式,優先順序如下:

  1. File.PrivateKeyPath / File.PublicKeyPath — 指定檔案路徑
  2. Option.PrivateKey / Option.PublicKey — 直接提供 PEM 文字
  3. 自動偵測 ./keys/private-key.pem./keys/public-key.pem;若不存在則產生新的 ECDSA P-256 金鑰對

CheckAuth

刷新期間可選呼叫的回呼。回傳 false(或 error)可在使用者不存在或不應繼續登入時強制登出。

CheckAuth: func(auth goJwt.Auth) (bool, error) {
    return userExists(auth.ID)
},

完整範例

secure := true
jwtAuth, err := goJwt.New(goJwt.Config{
    Redis: goJwt.Redis{
        Host:     "localhost",
        Port:     6379,
        Password: "secret",
        DB:       1,
    },
    Option: &goJwt.Option{
        AccessTokenExpires: 10 * time.Minute,
        RefreshIdExpires:   14 * 24 * time.Hour,
        MaxVersion:         3,
        RefreshTTL:         0.4,
    },
    Cookie: &goJwt.Cookie{
        Secure: &secure,
    },
    CheckAuth: func(auth goJwt.Auth) (bool, error) {
        return auth.ID != "", nil
    },
})
EN