gpt4 book ai didi

go - Golang 和 Goa 中的 JWT 声明中不存在范围

转载 作者:IT王子 更新时间:2023-10-29 00:47:54 25 4
gpt4 key购买 nike

我正在使用出色的 goa 包在 Go 中生成我的 API。

但是,我在使用它的安全中间件时遇到问题,当我向我的 Controller 提交不记名 token 时,由于“scopes:null”,我得到“授权失败”。我正在使用 Auth0 进行身份验证,它正在生成不记名 token 。 Postman 中的确切错误是:

{"id":"xOUR882s","code":"jwt_security_error","status":401,"detail":"authorization failed: required 'scopes' not present in JWT claim","meta":{"required":["read:meta"],"scopes":null}}

但是,我的 token 确实包含所需的范围 read:metajwt.io返回以下解码承载:

{
"iss": "https://learnlogic.au.auth0.com/",
"sub": "exJMkK7hXX56lrLwoTqna3s0jh7Gq67e@clients",
"aud": "https://api.learn-logic.com",
"exp": 1494855336,
"iat": 1494768936,
"scopes": "read:meta"
}

我希望有人能帮我弄清楚为什么,因为我不太了解 goa 项目中的 middleware/jwt.go 发生了什么,这可能被发现here .我唯一的想法是关于 Auth0 格式的承载与 middleware/jwt.go 中的 parseClaimScopes 函数不兼容,但我不知道是什么。

我有以下 main.go 代码:

b, err := ioutil.ReadFile("util/jwt.key")
if err != nil {
return
}

block, _ := pem.Decode([]byte(b))
var cert *x509.Certificate
cert, _ = x509.ParseCertificate(block.Bytes)
rsaPublicKey := cert.PublicKey.(*rsa.PublicKey)
fmt.Println(rsaPublicKey.N)
fmt.Println(rsaPublicKey.E)
fmt.Println(cert)

var keyx = []jwt.Key{rsaPublicKey}

var jwtResolver = jwt.NewSimpleResolver(keyx)

app.UseJWTMiddleware(service, jwt.New(jwtResolver, nil, app.NewJWTSecurity()))

我正在阅读的证书与 jwt.io 中使用的证书相同解码不记名 token 。

非常感谢任何帮助。

最佳答案

根据这张工单https://github.com/goadesign/goa/issues/1228 , 问题是由于只有单数名称“scope”而不是复数“scopes”的声明得到支持。本公关https://github.com/goadesign/goa/pull/1399 , 添加了复数形式。

关于go - Golang 和 Goa 中的 JWT 声明中不存在范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44036579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com