果阿中的用户感知操作
User aware action in goa
我正在用 goa 制作网络服务器(无法为其创建堆栈溢出标记,信誉不足)。
我找不到在控制器方法中获取用户上下文的方法。
我使用基本身份验证支持的 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 令牌内容的 jwt package exposes a ContextJWT 函数。这使得检索存储在令牌中的声明成为可能:
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 包。
我正在用 goa 制作网络服务器(无法为其创建堆栈溢出标记,信誉不足)。
我找不到在控制器方法中获取用户上下文的方法。 我使用基本身份验证支持的 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 令牌内容的 jwt package exposes a ContextJWT 函数。这使得检索存储在令牌中的声明成为可能:
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 包。