authentification OpenID Connect (Keycloak) : flux authorization code, state signé, validation du token ID via JWKS, provisioning automatique des utilisateurs
This commit is contained in:
1 parent
51bbb45b32
commit
bedb6c98e7
15 files changed
+1057
-23
No files matched your search
@@ -75,6 +75,38 @@ func (tm *JwtTokenManager) GenerateRefreshToken(userID string) (string, time.Tim
|
||||
return signed, expiresAt, err
|
||||
}
|
||||
|
||||
// GenerateStateToken crée un JWT court (10 min) utilisé comme paramètre state
|
||||
// du flux OIDC, porteur d'une donnée arbitraire (ex: l'id du fournisseur).
|
||||
func (tm *JwtTokenManager) GenerateStateToken(data string) (string, error) {
|
||||
claims := jwt.RegisteredClaims{
|
||||
Subject: data,
|
||||
Issuer: tm.issuer,
|
||||
ExpiresAt: jwt.NewNumericDate(time.Now().Add(10 * time.Minute)),
|
||||
IssuedAt: jwt.NewNumericDate(time.Now()),
|
||||
}
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
return token.SignedString(tm.secret)
|
||||
}
|
||||
|
||||
// ParseStateToken vérifie un state généré par GenerateStateToken et retourne
|
||||
// la donnée qu'il transporte.
|
||||
func (tm *JwtTokenManager) ParseStateToken(state string) (string, error) {
|
||||
claims := &jwt.RegisteredClaims{}
|
||||
token, err := jwt.ParseWithClaims(state, claims, func(t *jwt.Token) (interface{}, error) {
|
||||
if _, ok := t.Method.(*jwt.SigningMethodHMAC); !ok {
|
||||
return nil, errors.New("méthode de signature inattendue")
|
||||
}
|
||||
return tm.secret, nil
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if !token.Valid {
|
||||
return "", errors.New("token invalide")
|
||||
}
|
||||
return claims.Subject, nil
|
||||
}
|
||||
|
||||
// ParseAndValidate décode et vérifie la signature + l'expiration d'un JWT.
|
||||
func (tm *JwtTokenManager) ParseAndValidate(tokenString string) (*domain.User, error) {
|
||||
claims := &Claims{}
|
||||
|
||||
Reference in new issue
Block a user