Documentation
¶
Overview ¶
Package auth 提供 grpc-kit 微服务脚手架的认证授权模块
Package auth — GRN (Generic Resource Name) 实现 ¶
GRN 借鉴 AWS ARN 的 6 段固定结构:
grn:<partition>:<service>:<region>:<account-id>:<resource-type>/<resource-path>
完整规范见仓库内文档 adm/docs/spec/grn.md。本文件提供 Go 侧的解析 / 字符串化 / 通配匹配实现,与 Rego 端 `grn_match` 函数 MUST 行为一致;两侧共享同一份 table-driven 测试用例(pkg/auth/testdata/grn_match.json)。
设计要点:
- 6 段强校验:scheme MUST 为 "grn";段数 MUST 等于 6,否则视为非法 GRN。
- 第 6 段(resource)内部可能包含 ":"(备选形态 type:id),因此 Parse MUST 使用 SplitN(s, ":", 6) 而非 Split。
- partition 段 MUST 严格相等:不接受 "*" / "" 通配(spec/grn.md R-PART-2)。
- service / region / account 段 MAY 在 pattern 端为 "*"(或 ""=空 → 视为通配)。
- resource 段含 "*" 时走 glob.match(pattern, ["/"], want) 语义。
Index ¶
- Constants
- Variables
- func Match(pattern, want string) bool
- func NormalizePartition(p string) string
- type Client
- type Config
- type GRN
- type IDTokenClaims
- func (i *IDTokenClaims) GetAccessToken(signeKey string) (string, error)
- func (i *IDTokenClaims) GetAccessTokenRSA(signeKey *rsa.PrivateKey) (string, error)
- func (i *IDTokenClaims) GetMustUserID() int64
- func (i *IDTokenClaims) SetEmail(email string) *IDTokenClaims
- func (i *IDTokenClaims) SetExpiresAt(expiresIn int64) *IDTokenClaims
- func (i *IDTokenClaims) SetGroups(groups []string) *IDTokenClaims
- func (i *IDTokenClaims) SetSubject(subject string) *IDTokenClaims
- type OPAEnvoyPluginConfig
- type OPARegoConfig
- type OPASDKConfig
Constants ¶
const ( PartitionDefault = "grpc-kit" // 默认分区 PartitionCN = "grpc-kit-cn" // 中国大陆合规分区(预留) PartitionGov = "grpc-kit-gov" // 政企专网分区(预留) )
已登记的 GRN partition 枚举;新增 partition MUST 同步更新 adm/docs/spec/grn.md §6。
const DefaultPartition = "grpc-kit"
DefaultPartition 是 GRN partition 段在 Config.Partition 为空时使用的默认值。
Variables ¶
var ErrInvalidGRN = errors.New("auth: invalid GRN")
ErrInvalidGRN 表示输入字符串不符合 GRN 6 段结构。
Functions ¶
func Match ¶ added in v0.4.0
Match 判定 pattern 是否覆盖 want。语义与 Rego 端 `grn_match` 完全一致:
- 两端 MUST 均为合法 6 段 GRN,scheme 严格为 "grn"。
- partition 段 MUST 严格相等:pattern 端 "*" / "" 均**不接受**作为通配。
- service / region / account:pattern 端 "*" 或空字符串视为通配;否则严格相等。
- resource:pattern 含 "*" 时走 glob 匹配(分隔符 "/",与 OPA glob.match 一致), 不含 "*" 时严格相等。
want 端 MUST 是具体值(解析自请求上下文);在 want 端使用通配是调用方的逻辑错误, 本函数不为此做特殊处理(按字面量比较)。
func NormalizePartition ¶ added in v0.4.0
NormalizePartition 在 cfg 为空时返回默认 partition。
该函数供 input_builder / static_dict 在替换 ${partition} 占位符时使用, 确保 Config.Partition 未显式设置时仍能产生合法 GRN。
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client 认证鉴权客户端
func (*Client) AuthMetadata ¶
AuthMetadata 把 http 请求信息转换为 grpc 的 metadata 用于鉴权
func (*Client) GetRBACData ¶ added in v0.3.8
type Config ¶
type Config struct {
PackageName string
Partition string // GRN partition 段,默认 "grpc-kit"(详见 docs/spec/grn.md)
OPASDK *OPASDKConfig
OPARego *OPARegoConfig
OPAEnvoy *OPAEnvoyPluginConfig
}
Config xx
type GRN ¶ added in v0.4.0
GRN 表示一个解析后的 GRN(6 段)。
字段顺序与 spec/grn.md §2 的段位顺序严格一致:
grn:<Partition>:<Service>:<Region>:<Account>:<Resource>
Resource 段保留完整字符串(含 type/path 或 type:id 形态),具体子结构由调用方解析。
type IDTokenClaims ¶ added in v0.4.0
type IDTokenClaims struct {
jwt.RegisteredClaims
Email string `json:"email,omitempty"`
EmailVerified bool `json:"email_verified,omitempty"`
// 注意:在这里 "Groups" 对应平台 "lion_roles" 表中的 "name" 而非 "lion_groups" 内容。
Groups []string `json:"groups,omitempty"`
FederatedClaims map[string]string `json:"federated_claims,omitempty"`
Appid string `json:"appid,omitempty"`
Tenant string `json:"tenant,omitempty"`
Username string `json:"username,omitempty"`
Nickname string `json:"nickname,omitempty"`
}
IDTokenClaims 用于框架jwt的数据结构 部分参考:https://openid.net/specs/openid-connect-core-1_0.html#IDToken
func ParseIDTokenClaims ¶ added in v0.4.0
func ParseIDTokenClaims(token string) (*IDTokenClaims, error)
ParseIDTokenClaims 解析 token
func (*IDTokenClaims) GetAccessToken ¶ added in v0.4.0
func (i *IDTokenClaims) GetAccessToken(signeKey string) (string, error)
GetAccessToken 获取或生成 jwt token
func (*IDTokenClaims) GetAccessTokenRSA ¶ added in v0.4.0
func (i *IDTokenClaims) GetAccessTokenRSA(signeKey *rsa.PrivateKey) (string, error)
func (*IDTokenClaims) GetMustUserID ¶ added in v0.4.0
func (i *IDTokenClaims) GetMustUserID() int64
func (*IDTokenClaims) SetEmail ¶ added in v0.4.0
func (i *IDTokenClaims) SetEmail(email string) *IDTokenClaims
func (*IDTokenClaims) SetExpiresAt ¶ added in v0.4.0
func (i *IDTokenClaims) SetExpiresAt(expiresIn int64) *IDTokenClaims
func (*IDTokenClaims) SetGroups ¶ added in v0.4.0
func (i *IDTokenClaims) SetGroups(groups []string) *IDTokenClaims
func (*IDTokenClaims) SetSubject ¶ added in v0.4.0
func (i *IDTokenClaims) SetSubject(subject string) *IDTokenClaims
type OPAEnvoyPluginConfig ¶
type OPAEnvoyPluginConfig struct {
GRPCAddress string
}
type OPARegoConfig ¶
type OPASDKConfig ¶
type OPASDKConfig struct {
Config string
}