Я создаю веб-сервер с goa (не могу создать для него тег переполнения стека, недостаточно репутации).
Я не могу найти способ получить пользовательский контекст внутри метода контроллера. Я использую аутентификацию JWT, которая поддерживается базовой аутентификацией. У меня есть безопасное действие JWT, защищенное с помощью промежуточного программного обеспечения JWT, которое проверяет пароли и т. д.
Я хочу получить имя пользователя из токена JWT в безопасный метод. Там в любом случае?
Фрагмент файла дизайна Гоа:
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.