41 lines
2.3 KiB
Go
41 lines
2.3 KiB
Go
|
package usecase
|
|||
|
|
|||
|
import "context"
|
|||
|
|
|||
|
type TokenUseCase interface {
|
|||
|
// NewToken 創建新 Token,通常為 Access Token
|
|||
|
NewToken(ctx context.Context, req AuthorizationReq) (TokenResp, error)
|
|||
|
// RefreshToken 刷新目前的 Token,包括一次性 Token
|
|||
|
RefreshToken(ctx context.Context, req RefreshTokenReq) (RefreshTokenResp, error)
|
|||
|
// CancelToken 取消 Token,包括取消其關聯的 One-Time Token
|
|||
|
CancelToken(ctx context.Context, req CancelTokenReq) error
|
|||
|
// ValidationToken 驗證 Token 是否有效
|
|||
|
ValidationToken(ctx context.Context, req ValidationTokenReq) (ValidationTokenResp, error)
|
|||
|
// CancelTokens 根據 UID 或 Token ID 取消所有相關 Token,通常在用戶登出時使用
|
|||
|
CancelTokens(ctx context.Context, req DoTokenByUIDReq) error
|
|||
|
// CancelTokenByDeviceID 根據 Device ID 取消所有相關的 Token
|
|||
|
CancelTokenByDeviceID(ctx context.Context, req DoTokenByDeviceIDReq) error
|
|||
|
// GetUserTokensByDeviceID 根據 Device ID 獲取所有 Token
|
|||
|
GetUserTokensByDeviceID(ctx context.Context, req DoTokenByDeviceIDReq) ([]*TokenResp, error)
|
|||
|
// GetUserTokensByUID 根據 UID 獲取所有 Token
|
|||
|
GetUserTokensByUID(ctx context.Context, req QueryTokenByUIDReq) ([]*TokenResp, error)
|
|||
|
// NewOneTimeToken 創建一次性 Token,例如 Refresh Token
|
|||
|
NewOneTimeToken(ctx context.Context, req CreateOneTimeTokenReq) (CreateOneTimeTokenResp, error)
|
|||
|
// CancelOneTimeToken 取消一次性 Token
|
|||
|
CancelOneTimeToken(ctx context.Context, req CancelOneTimeTokenReq) error
|
|||
|
// ReadTokenBasicData 檢查Token 帶的資料
|
|||
|
ReadTokenBasicData(ctx context.Context, token string) (map[string]string, error)
|
|||
|
}
|
|||
|
|
|||
|
// AuthorizationReq 定義授權請求的結構
|
|||
|
type AuthorizationReq struct {
|
|||
|
GrantType string `json:"grant_type"` // 授權類型
|
|||
|
DeviceID string `json:"device_id"` // 設備 ID
|
|||
|
Scope string `json:"scope"` // 授權範圍
|
|||
|
Data map[string]string `json:"data"` // 附加數據
|
|||
|
Expires int64 `json:"expires"` // 過期時間(秒)
|
|||
|
IsRefreshToken bool `json:"is_refresh_token"` // 是否為刷新令牌
|
|||
|
Role string `json:"role"` // 是否為刷新令牌
|
|||
|
Account string `json:"account"` // 登入時的帳號
|
|||
|
}
|