Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk mendapatkan kebenaran daripada token Auth0 jwt menggunakan go gin
Saya sedang belajar pergi dan ingin menyediakan aplikasi mudah menggunakan auth0. Menggunakan tutorial mereka, saya dapat menyediakan pengesahan asas untuk titik akhir api saya. Sekarang saya ingin menambah pengendalian kebenaran menggunakan token jwt. Jadi saya mengaktifkan RBAC untuk titik akhir api dan menambah kebenaran. Saya menggunakan aliran daripada tutorial untuk pengisytiharan tersuai, tetapi menulis middleware saya sendiri dengannya dan menyesuaikannya untuk berfungsi dengan Gin.
func NeedsPermission(expectedScope string) gin.HandlerFunc { return func(context *gin.Context) { token := context.Request.Context().Value(jwtmiddleware.ContextKey{}).(*validator.ValidatedClaims) claims := token.CustomClaims.(*CustomClaims) if !claims.HasScope(expectedScope) { context.AbortWithStatus(403) } context.Next() } }
Masalahnya ialah tiada tuntutan tersuai dalam token, hanya tuntutan lalai: tuntutan openid, profil dan e-mel.
Ini adalah kandungan token:
{ "iss": "https://dev-****.us.auth0.com/", "sub": "google-oauth2|****", "aud": [ "localhost:3000/books", "https://dev-****.us.auth0.com/userinfo" ], "iat": 1701789297, "exp": 1701875697, "azp": "***", "scope": "openid profile email", "permissions": [ "read:books" ] }
Jadi, ia mempunyai kebenaran medan, tetapi bagaimana saya boleh mengaksesnya menggunakan perisian auth0/go-jwt-middleware atau adakah saya perlu menyahkodnya terlebih dahulu?
Kebenaran ialah pengisytiharan tersuai, jadi anda perlu lulus WithCustomClaims
选项以及 validator.CustomClaims
pelaksanaan antara muka.
Kemudian apabila anda mencipta pengesah:
... jwtValidator, _ := validator.New( keyFunc, validator.HS256, issuer, audience, validator.WithCustomClaims(func() validator.CustomClaims { return &MyClaims{} }), ) mw := jwtmiddleware.New(jwtValidator.ValidateToken) ...
Antaranya MyClaims
是这样的。请注意您的 HasScope
kaedah:
type MyClaims struct { Permissions []string `json:"permissions"` } func (c *MyClaims) Validate(ctx context.Context) error { // Validate structure of permissions here, i.e. check for 400 not 403 return nil } func (c MyClaims) HasScope(requiredPerm string) bool { for _, perm := range c.Permissions { if perm == requiredPerm { return true } } return false }
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan kebenaran daripada token Auth0 jwt menggunakan go gin. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!