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

时间:2017-05-18 00:05:40

标签: go jwt auth0

我正在使用优秀的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}}

但是,我的令牌确实包含所需的范围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"
}

我希望有人可以帮助我锻炼为什么,因为我真的不明白middleware/jwt.go项目goa中可能发现parseClaimScopes的内容middleware/jwt.go。我唯一的想法是,关于Auth0格式的承载的某些内容与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())) 函数不兼容,但我不知道是什么。

我有以下>>> import numpy as np >>> test = np.array((1,2)) >>> test array([1, 2]) >>> 10**test array([ 10, 100]) 代码:

>>> test = (1,2)
>>> tuple(10**k for k in test)
(10, 100)

我正在阅读的证书与here中用于解码承载令牌的证书相同。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

根据这张票证https://github.com/goadesign/goa/issues/1228,该问题是由于以下事实造成的:仅支持单数名称“ scope”而不是复数“ scopes”的索赔。此PR https://github.com/goadesign/goa/pull/1399添加了复数形式。