首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang和Goa的JWT申请中不存在的作用域

Golang和Goa的JWT申请中不存在的作用域
EN

Stack Overflow用户
提问于 2017-05-18 08:05:40
回答 1查看 664关注 0票数 4

我正在使用优秀的goa包在Go中生成我的应用程序接口。

然而,我的安全中间件有一个问题,当我向我的控制器提交一个持有者令牌时,我得到了“授权失败”,因为“作用域:空”。我使用Auth0进行身份验证,它正在生成持有者令牌。Postman中的确切错误是:

代码语言:javascript
复制
{"id":"xOUR882s","code":"jwt_security_error","status":401,"detail":"authorization failed: required 'scopes' not present in JWT claim","meta":{"required":["read:meta"],"scopes":null}}

但是,我的令牌确实包含了所需的作用域read:metajwt.io返回如下解码后的承载:

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

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

我有以下main.go代码:

代码语言:javascript
复制
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中用于解码持有者令牌的证书相同。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2019-03-19 06:08:44

根据这个票证https://github.com/goadesign/goa/issues/1228,问题是由于只支持具有单数名称"scope“的声明,而不是复数”scope“。这个PR https://github.com/goadesign/goa/pull/1399,添加了复数版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44036579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档