Bagaimana untuk mendapatkan kebenaran daripada token Auth0 jwt menggunakan go gin

WBOY
Lepaskan: 2024-02-12 15:09:07
ke hadapan
980 orang telah melayarinya

如何使用 go gin 从 Auth0 jwt 令牌检索权限

Kandungan soalan

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()
    }
}
Salin selepas log masuk

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"
  ]
}
Salin selepas log masuk

Jadi, ia mempunyai kebenaran medan, tetapi bagaimana saya boleh mengaksesnya menggunakan perisian auth0/go-jwt-middleware atau adakah saya perlu menyahkodnya terlebih dahulu?

Penyelesaian

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)
    ...
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!