首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >goa中的用户感知操作

goa中的用户感知操作
EN

Stack Overflow用户
提问于 2016-10-15 07:05:06
回答 1查看 326关注 0票数 2

我正在用果阿制作一个web服务器(不能为它创建堆栈溢出标记,声誉不够)。

我无法找到在控制器方法中获取用户上下文的方法。我使用由basic支持的JWT。我有一个通过JWT中间件保护的JWT安全操作,它检查密码等等。

我想要的是将用户名从JWT令牌获取到安全方法。有办法吗?

goa设计文件片段:

代码语言:javascript
复制
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被生成到这个方法中:

代码语言:javascript
复制
func (c *JWTSessionsController) Secure(ctx *app.SecureJWTContext) error {
    return ctx.OK(&app.Success{false})
}

生成的操作是安全的,运行良好(安装了中间件并通过了所有验证)。但我想在行动中得到用户名。有可能吗?

我想用这样的方式:

代码语言:javascript
复制
ctx.User.Username

现在,我必须解析jwt两次。:(

我做了一个解析base64令牌声明的助手。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-15 16:41:10

jwt包公开一个ContextJWT函数,该函数从请求上下文中提取JWT令牌内容。这使得检索存储在令牌中的索赔成为可能:

代码语言:javascript
复制
token := jwt.ContextJWT(ctx)
claims := token.Claims.(jwtgo.MapClaims)
subject := claims["sub"] // "sub" claim contains security principal
// ... use subject to authenticate

其中jwtgo是dgrijalva/jwt包。

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

https://stackoverflow.com/questions/40056106

复制
相关文章

相似问题

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