jwt

package module
v1.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 23, 2022 License: MIT Imports: 11 Imported by: 0

README

Встраиваемый в конвейер echo модуль авторизации для валидации входящих запросов. Модуль проверяет цифровую подпись JWT токенов авторизации по публичному ключу для защищенных запросов и, в случае успешной проверки, подготавливает пользовательские данные для их прямого использования в пользовательском коде приложения. Метод считается защищенным если он подпадает в условия, заданные регулярными выражениями в настройках модуля. Открытые методы доступны без авторизации, но если в запросе к открытым методам представлен JWT токен он будет также провалидирован.

Валидация токенов происходит по трем параметрам:

  • Публичному ключу для проверки цифровой подписи токена.
  • Issuer
  • Audience

Пример конфигурации сервиса, использующего модуль авторизации

jwt:
  public_key: |
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE35pY9Ig4aK6Qvq0cZMLJOJXit3Jx
    T2J+iVkAVn1X8f4szENyvvPzWfat5VlNo+lagIww2l/jdAeiCg1sQMAUmQ==
    -----END PUBLIC KEY-----
  issuer: 'apps.m-ticket.ru/ra/ru-sak'
  audience: 'https://apps.m-ticket.ru/ra/ru-sak'

#Спецификация защищенных маршрутов передается в мидлвари в виде коллекции регулярных выражений securutyRoutes:

securityRoutes := make(map[string][]string)
	securityRoutes["POST"] = []string{"^/post$","^/comments$"}
	securityRoutes["PUT"] = []string{"^/post/"}
	securityRoutes["DELETE"] = []string{"^/post/"}

Подключение модуля в конвейер echo.

app.go

improt (
...
PetAuth "https://github.com/altatec-sources/go-jwt-middleware"
...
)

func Run(cfg *config.Config) {
	...
	//jwt
	validator := PetAuth.NewJwtValidator(cfg.PublicKey, cfg.Issuer, cfg.Audience)


	mw := PetAuth.NewJwtValidatorMiddleware(validator, securityRoutes)
	e.Use(mw.JwtParseMiddleware)
	...
	// codegen
	codegen.RegisterHandlers(e, ps)
	
}

Получение объекта токена авторизации и распарсенных клаймов в пользовательском коде

server.go

improt (
...
PetAuth "https://github.com/altatec-sources/go-jwt-middleware"
...
)
func (ps *PostServer) PostPost(ctx echo.Context) error {
	cc, ok := ctx.(*PetAuth.JwtContext)
	if ok {
		token := cc.Token
		uniqueName := cc.UniqueName
		emailHash := cc.EmailHash
		roles := cc.Roles
	}

Documentation

Index

Constants

View Source
const Anonymous string = "default"
View Source
const EmailHash string = "email_hash"
View Source
const Role string = "role"
View Source
const Unauthorized int = 401
View Source
const UniqueName string = "unique_name"

Variables

This section is empty.

Functions

func GetJWSFromRequest

func GetJWSFromRequest(req *http.Request) (string, error)

GetJWSFromRequest extracts a JWS string from an Authorization: Bearer <jws> header

Types

type JwtContext

type JwtContext struct {
	echo.Context
	Token      jwt.Token
	UniqueName string
	EmailHash  string
	Roles      []string
}

type JwtValidator

type JwtValidator struct {
	// contains filtered or unexported fields
}

func NewJwtValidator

func NewJwtValidator(publicKeyStr string, issuer string, audience string) *JwtValidator

func (*JwtValidator) Validate

func (m *JwtValidator) Validate(jws string) (token jwt.Token, err error)

type JwtValidatorInterface

type JwtValidatorInterface interface {
	Validate(jws string) (jwt.Token, error)
}

type JwtValidatorMiddleware

type JwtValidatorMiddleware struct {
	// contains filtered or unexported fields
}

func NewJwtValidatorMiddleware

func NewJwtValidatorMiddleware(jwtValidator JwtValidatorInterface, routeMap map[string][]string) *JwtValidatorMiddleware

func (*JwtValidatorMiddleware) JwtParseMiddleware

func (m *JwtValidatorMiddleware) JwtParseMiddleware(next echo.HandlerFunc) echo.HandlerFunc

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL