Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security goa中的用户感知操作_Security_Go_Jwt_Jwt Go - Fatal编程技术网

Security goa中的用户感知操作

Security goa中的用户感知操作,security,go,jwt,jwt-go,Security,Go,Jwt,Jwt Go,我正在制作一个web服务器(无法为其创建堆栈溢出标记,信誉不足) 我找不到在控制器方法中获取用户上下文的方法。 我使用基本身份验证支持的JWT身份验证。 我有一个通过JWT中间件保护的JWT安全操作,它检查密码等等 我想要的是将用户名从JWT令牌获取到安全方法。有办法吗 goa设计文件片段: var JWT = JWTSecurity("jwt", func() { Header("Authorization") Scope("api:access", "API access")

我正在制作一个web服务器(无法为其创建堆栈溢出标记,信誉不足)

我找不到在控制器方法中获取用户上下文的方法。 我使用基本身份验证支持的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令牌声明的助手。

该包公开了一个函数,该函数从请求上下文中提取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-go包。

它相当不错,但是它仍然需要一些包装来将jwt-go框架与生成的控制器隔离。看起来它应该可以完成这项工作