feat/initial-poc
main
本 PR 是协议与签名 PoC,不包含可运行服务、Kubernetes TokenReview、策略数据库、CEL 或 OpenBao JWT auth 登录。
@@ -0,0 +65,4 @@
return ExchangeRequest{}, requestError("invalid_scope", "scope is required")
}
for _, unsupported := range []string{"resource", "actor_token", "actor_token_type"} {
if form.Has(unsupported) {
除非标准中明确规定需要返回错误,否则直接忽略就好了
已处理:未知扩展参数按 RFC 6749 忽略;resource 和 actor_token 是 RFC 8693 已定义参数,resource 改为 invalid_target,actor_token 因 RFC 要求验证而在 v1 返回 invalid_request,并补充测试。
@@ -0,0 +1,97 @@
package signing
等会你整个文件在用标准库重新实现JWT库?
已处理:JWT protected header、JWS signing input 和 compact serialization 已改由 go-jose OpaqueSigner 完成,不再自行实现 JWT/JWS 编码。
@@ -0,0 +37,4 @@
router.Get("/healthz", endpoints.Health.ServeHTTP)
router.Get("/readyz", endpoints.Ready.ServeHTTP)
options := make([]otelhttp.Option, 0, 3)
otel应该作为可选引入,不强制安装
已处理:纯 chi router 已移除 otelhttp 依赖路径;OTel 现在是启动层显式选择的独立 wrapper,未启用时不安装 instrumentation。
@@ -0,0 +35,4 @@
type Issuer struct {
signer RS256Signer
now func() time.Time
何意味?这个还有替换的可能吗
已处理:移除了用于测试替换时间的 Issuer.now 字段。Issuer 现在固定持有 issuer/TTL,公开 Issue 使用当前时间,测试通过内部 issueAt 固定时间。
@@ -0,0 +63,4 @@
return "", fmt.Errorf("encode claims: %w", err)
opaque := &contextSigner{ctx: ctx, signer: i.signer, key: key}
这部分是?
已处理:删除了为 go-jose OpaqueSigner 捕获 context 的 contextSigner。JOSE 编码是纯本地计算,context 现在只传给 Transit RPC。
@@ -0,0 +45,4 @@
return &Issuer{signer: signer, now: time.Now}, nil
func (i *Issuer) Sign(ctx context.Context, claims Claims) (string, error) {
流程看上去对,但代码太面条了,说不定这里建模是有问题的
已处理:流程重构为本地 encode → Transit.Sign(ctx) → 本地 compact;调用方改为 IssueRequest,issuer 统一生成时效 claims,职责和控制流已拆开。
@@ -0,0 +1,185 @@
整个文件大概看了一眼问题跟jwt.go差不多
已处理:Transit metadata 改为类型化 mapstructure 解码,key metadata 读取、签名响应解析和 JWKS 转换已拆分;并通过真实 OpenBao v2.6.1 集成测试。
No dependencies set.
The note is not visible to the blocked user.
内容
验证
边界
本 PR 是协议与签名 PoC,不包含可运行服务、Kubernetes TokenReview、策略数据库、CEL 或 OpenBao JWT auth 登录。
@@ -0,0 +65,4 @@return ExchangeRequest{}, requestError("invalid_scope", "scope is required")}for _, unsupported := range []string{"resource", "actor_token", "actor_token_type"} {if form.Has(unsupported) {除非标准中明确规定需要返回错误,否则直接忽略就好了
已处理:未知扩展参数按 RFC 6749 忽略;resource 和 actor_token 是 RFC 8693 已定义参数,resource 改为 invalid_target,actor_token 因 RFC 要求验证而在 v1 返回 invalid_request,并补充测试。
@@ -0,0 +1,97 @@package signing等会你整个文件在用标准库重新实现JWT库?
已处理:JWT protected header、JWS signing input 和 compact serialization 已改由 go-jose OpaqueSigner 完成,不再自行实现 JWT/JWS 编码。
@@ -0,0 +37,4 @@router.Get("/healthz", endpoints.Health.ServeHTTP)router.Get("/readyz", endpoints.Ready.ServeHTTP)options := make([]otelhttp.Option, 0, 3)otel应该作为可选引入,不强制安装
已处理:纯 chi router 已移除 otelhttp 依赖路径;OTel 现在是启动层显式选择的独立 wrapper,未启用时不安装 instrumentation。
@@ -0,0 +35,4 @@type Issuer struct {signer RS256Signernow func() time.Time何意味?这个还有替换的可能吗
已处理:移除了用于测试替换时间的 Issuer.now 字段。Issuer 现在固定持有 issuer/TTL,公开 Issue 使用当前时间,测试通过内部 issueAt 固定时间。
@@ -0,0 +63,4 @@return "", fmt.Errorf("encode claims: %w", err)}opaque := &contextSigner{ctx: ctx, signer: i.signer, key: key}这部分是?
已处理:删除了为 go-jose OpaqueSigner 捕获 context 的 contextSigner。JOSE 编码是纯本地计算,context 现在只传给 Transit RPC。
@@ -0,0 +45,4 @@return &Issuer{signer: signer, now: time.Now}, nil}func (i *Issuer) Sign(ctx context.Context, claims Claims) (string, error) {流程看上去对,但代码太面条了,说不定这里建模是有问题的
已处理:流程重构为本地 encode → Transit.Sign(ctx) → 本地 compact;调用方改为 IssueRequest,issuer 统一生成时效 claims,职责和控制流已拆开。
@@ -0,0 +1,185 @@package signing整个文件大概看了一眼问题跟jwt.go差不多
已处理:Transit metadata 改为类型化 mapstructure 解码,key metadata 读取、签名响应解析和 JWKS 转换已拆分;并通过真实 OpenBao v2.6.1 集成测试。