加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang和Goa的JWT索赔中没有范围

发布时间:2020-12-16 09:23:09 所属栏目:大数据 来源:网络整理
导读:我正在使用优秀的goa包在Go中生成我的API. 但是,我的安全中间件存在问题,当我向控制器提交持有者令牌时,由于“范围:null”,我得到“授权失败”.我正在使用Auth0进行身份验证,并且正在生成承载令牌.邮递员的确切错误是: {"id":"xOUR882s","code":"jwt_secur
我正在使用优秀的goa包在Go中生成我的API.

但是,我的安全中间件存在问题,当我向控制器提交持有者令牌时,由于“范围:null”,我得到“授权失败”.我正在使用Auth0进行身份验证,并且正在生成承载令牌.邮递员的确切错误是:

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

但是,我的令牌确实包括所需的范围:meta. jwt.io返回以下解码的承载:

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

我希望有人可以帮助我锻炼为什么,因为我真的不明白在goa项目中的中间件/ 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中用于解码承载令牌的证书相同.

任何帮助深表感谢.

解决方法

根据这张票 https://github.com/goadesign/goa/issues/1228,问题是由于只有对单一名称“范围”而非复数“范围”的索赔的支持.这个PR https://github.com/goadesign/goa/pull/1399,增加了复数版本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读