我正在用果阿制作一个web服务器(不能为它创建堆栈溢出标记,声誉不够)。
我无法找到在控制器方法中获取用户上下文的方法。我使用由basic支持的JWT。我有一个通过JWT中间件保护的JWT安全操作,它检查密码等等。
我想要的是将用户名从JWT令牌获取到安全方法。有办法吗?
goa设计文件片段:
var JWT = JWTSecurity("jwt", func() {
Header("Authorization")
Scope("api:access", "API access") // Define "api:access" scope
})
Security(JWT, func() {
// Use JWT to auth requests to this endpoint
Scope("api:access") // Enforce presence of "api" scope in JWT claims.
})
Action("secure", func() {
Description("This action is secured with the jwt scheme")
Routing(GET("/jwt"))
Response(OK)
})这个DSL被生成到这个方法中:
func (c *JWTSessionsController) Secure(ctx *app.SecureJWTContext) error {
return ctx.OK(&app.Success{false})
}生成的操作是安全的,运行良好(安装了中间件并通过了所有验证)。但我想在行动中得到用户名。有可能吗?
我想用这样的方式:
ctx.User.Username现在,我必须解析jwt两次。:(
我做了一个解析base64令牌声明的助手。
发布于 2016-10-15 16:41:10
jwt包公开一个ContextJWT函数,该函数从请求上下文中提取JWT令牌内容。这使得检索存储在令牌中的索赔成为可能:
token := jwt.ContextJWT(ctx)
claims := token.Claims.(jwtgo.MapClaims)
subject := claims["sub"] // "sub" claim contains security principal
// ... use subject to authenticate其中jwtgo是dgrijalva/jwt包。
https://stackoverflow.com/questions/40056106
复制相似问题