Classes MastraAuthGoogle et MastraRBACGoogle
Classe MastraAuthGoogleLien direct vers Classe MastraAuthGoogle
La classe MastraAuthGoogle fournit à Mastra une authentification reposant sur Google Workspace. Elle met en œuvre un flux de connexion OAuth 2.0 / OIDC avec des cookies de session chiffrés, vérifie les jetons d’identité Google et s’intègre au serveur Mastra au moyen de l’option auth.
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { Mastra } from '@mastra/core'
import { MastraAuthGoogle } from '@mastra/auth-google'
export const mastra = new Mastra({
server: {
auth: new MastraAuthGoogle({
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
redirectUri: process.env.GOOGLE_REDIRECT_URI,
allowedDomains: ['example.com'],
}),
},
})
Vous pouvez omettre les paramètres du constructeur si les variables d’environnement requises sont définies. Dans ce cas, utilisez new MastraAuthGoogle() sans argument.
Paramètres du constructeurLien direct vers Paramètres du constructeur
clientId?:
clientSecret?:
redirectUri?:
scopes?:
allowedDomains?:
hd vérifiée.hostedDomain?:
hd lors de la connexion. Il s’agit uniquement d’une indication, qui n’est pas utilisée pour l’autorisation.session?:
cookieName?:
cookieMaxAge?:
cookiePassword?:
secureCookies?:
Secure des cookies de session.name?:
Variables d’environnementLien direct vers Variables d’environnement
Les variables d’environnement suivantes sont utilisées automatiquement lorsque les options du constructeur ne sont pas fournies :
GOOGLE_CLIENT_ID:
GOOGLE_CLIENT_SECRET?:
GOOGLE_REDIRECT_URI?:
GOOGLE_COOKIE_PASSWORD?:
GOOGLE_ALLOWED_DOMAINS?:
GOOGLE_HOSTED_DOMAIN?:
Flux d’authentificationLien direct vers Flux d’authentification
MastraAuthGoogle authentifie les requêtes dans l’ordre suivant :
- Cookie de session. Lorsque le SSO est activé, le Provider lit et déchiffre le cookie de session chiffré. Une session valide et non expirée authentifie l’utilisateur.
- Repli sur le jeton d’identité Google : si aucun cookie de session valide n’est présent, le jeton de l’en-tête
Authorizationest vérifié auprès de l’endpoint JWKS de Google.
Après l’authentification, authorizeUser vérifie que l’utilisateur possède un identifiant Google valide, que l’expiration issue du jeton n’est pas dépassée et, lorsque des domaines sont configurés, que la claim hd vérifiée de l’utilisateur correspond à allowedDomains.
Méthodes d’authentificationLien direct vers Méthodes d’authentification
authenticateToken(token, request?)Lien direct vers authenticatetokentoken-request
Authentifie un jeton d’identité Google. Lorsque le SSO est activé, cette méthode vérifie le cookie de session chiffré avant de vérifier le jeton Bearer.
const user = await auth.authenticateToken(idToken, request)
Renvoie : Promise<GoogleUser | null>
getCurrentUser(request)Lien direct vers getcurrentuserrequest
Renvoie l’utilisateur authentifié à partir d’un cookie de session ou d’un jeton d’identité Google Bearer.
const user = await auth.getCurrentUser(request)
Renvoie : Promise<GoogleUser | null>
authorizeUser(user)Lien direct vers authorizeuseruser
Renvoie true si l’utilisateur possède un identifiant, n’a pas expiré et, lorsque des domaines sont configurés, correspond à allowedDomains.
const allowed = auth.authorizeUser(user)
Renvoie : boolean
getUser(userId)Lien direct vers getuseruserid
Renvoie null. Les jetons d’identité Google étant vérifiés directement, ce Provider ne recherche pas les utilisateurs par identifiant.
const user = await auth.getUser(userId)
Renvoie : Promise<GoogleUser | null>
Type GoogleUserLien direct vers googleuser-type
Le type GoogleUser étend l’interface de base EEUser avec des champs propres à Google :
id:
sub.googleId:
email?:
name?:
avatarUrl?:
hostedDomain?:
hd vérifiée.expiresAt?:
emailVerified?:
groups?:
Classe MastraRBACGoogleLien direct vers Classe MastraRBACGoogle
La classe MastraRBACGoogle associe les groupes Google Workspace aux permissions Mastra. Elle récupère les groupes d’un utilisateur dans l’API Directory du Google Admin SDK, puis les résout à l’aide d’un mappage de rôles configurable. Utilisez-la avec MastraAuthGoogle ou tout autre Provider d’authentification.
RBAC nécessite une licence Enterprise Edition valide. La fonctionnalité est utilisable sans licence en développement afin de pouvoir l’essayer localement, mais une licence est nécessaire en production. Contactez l’équipe commerciale pour en savoir plus.
Exemple d’utilisationLien direct vers Exemple d’utilisation
Utilisez MastraRBACGoogle avec un Provider d’authentification en le transmettant à l’option rbac :
import { Mastra } from '@mastra/core'
import { MastraAuthGoogle, MastraRBACGoogle } from '@mastra/auth-google'
export const mastra = new Mastra({
server: {
auth: new MastraAuthGoogle(),
rbac: new MastraRBACGoogle({
serviceAccount: {
clientEmail: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL!,
privateKey: process.env.GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY!,
subject: process.env.GOOGLE_WORKSPACE_ADMIN_EMAIL!,
},
roleMapping: {
'admins@example.com': ['*'],
'engineering@example.com': ['agents:*', 'workflows:*', 'tools:*'],
'viewers@example.com': ['agents:read', 'workflows:read'],
_default: [],
},
}),
},
})
Pour utiliser Google Workspace RBAC avec un autre Provider d’authentification, transmettez une fonction getUserKey qui détermine la clé utilisateur de l’API Google Directory à partir de l’objet utilisateur de l’autre Provider :
import { Mastra } from '@mastra/core'
import { MastraAuthAuth0 } from '@mastra/auth-auth0'
import { MastraRBACGoogle } from '@mastra/auth-google'
export const mastra = new Mastra({
server: {
auth: new MastraAuthAuth0(),
rbac: new MastraRBACGoogle({
getUserKey: user => user.email,
serviceAccount: {
clientEmail: process.env.GOOGLE_SERVICE_ACCOUNT_EMAIL!,
privateKey: process.env.GOOGLE_SERVICE_ACCOUNT_PRIVATE_KEY!,
subject: process.env.GOOGLE_WORKSPACE_ADMIN_EMAIL!,
},
roleMapping: {
'engineering@example.com': ['agents:*', 'workflows:*'],
'admins@example.com': ['*'],
_default: [],
},
}),
},
})
Paramètres du constructeurLien direct vers Paramètres du constructeur
roleMapping:
'_default' pour attribuer des permissions aux utilisateurs qui ne correspondent à aucun groupe. Prend en charge les caractères génériques tels que '*' (accès complet) et 'agents:*' (toutes les actions des Agents).accessToken?:
getAccessToken?:
serviceAccount?:
clientEmail:
privateKey:
\n échappées provenant de fichiers .env sont prises en charge.privateKeyId?:
subject?:
scopes?:
getUserKey?:
userKey de l’API Directory à partir d’un utilisateur authentifié. Valeur par défaut : user.email.mapGroupToRoles?:
[group.email].cache?:
maxSize?:
ttlMs?:
Méthodes RBACLien direct vers Méthodes RBAC
getRoles(user)Lien direct vers getrolesuser
Renvoie les identifiants de rôles des groupes Google Workspace d’un utilisateur.
const roles = await rbac.getRoles(user)
Renvoie : Promise<string[]>
getPermissions(user)Lien direct vers getpermissionsuser
Renvoie les permissions Mastra déterminées à partir des groupes Google Workspace et de roleMapping.
const permissions = await rbac.getPermissions(user)
Renvoie : Promise<string[]>
hasPermission(user, permission)Lien direct vers haspermissionuser-permission
Vérifie si un utilisateur possède une permission.
const canReadAgents = await rbac.hasPermission(user, 'agents:read')
Renvoie : Promise<boolean>
hasRole(user, role)Lien direct vers hasroleuser-role
Vérifie si un rôle de groupe Google Workspace précis a été associé à l’utilisateur.
const isAdmin = await rbac.hasRole(user, 'admins@example.com')
Renvoie : Promise<boolean>
hasAllPermissions(user, permissions)Lien direct vers hasallpermissionsuser-permissions
Vérifie si un utilisateur possède toutes les permissions demandées.
const canManageAgents = await rbac.hasAllPermissions(user, ['agents:read', 'agents:update'])
Renvoie : Promise<boolean>
hasAnyPermission(user, permissions)Lien direct vers hasanypermissionuser-permissions
Vérifie si un utilisateur possède au moins l’une des permissions demandées.
const canReadSomething = await rbac.hasAnyPermission(user, ['agents:read', 'workflows:read'])
Renvoie : Promise<boolean>
getAvailableRoles()Lien direct vers getavailableroles
Renvoie les identifiants de rôles configurés dans roleMapping, à l’exclusion de _default.
const roles = await rbac.getAvailableRoles()
Renvoie : Promise<{ id: string; name: string }[]>
getPermissionsForRole(roleId)Lien direct vers getpermissionsforroleroleid
Renvoie les permissions configurées pour un identifiant de rôle.
const permissions = await rbac.getPermissionsForRole('engineering@example.com')
Renvoie : Promise<string[]>
clearCache()Lien direct vers clearcache
Efface du cache toutes les recherches de groupes Google Workspace.
rbac.clearCache()
Renvoie : void
clearUserCache(userKey)Lien direct vers clearusercacheuserkey
Efface du cache la recherche de groupes associée à une clé utilisateur de l’API Directory, par exemple une adresse e-mail.
rbac.clearUserCache('user@example.com')
Renvoie : void
getCacheStats()Lien direct vers getcachestats
Renvoie la taille actuelle et la taille maximale du cache des recherches de groupes.
const stats = rbac.getCacheStats()
Renvoie : { size: number; maxSize: number }
Configuration supplémentaireLien direct vers Configuration supplémentaire
MastraRBACGoogle utilise GET https://admin.googleapis.com/admin/directory/v1/groups?userKey=... et gère la pagination. Pour les déploiements Google Workspace en production, fournissez un compte de service doté d’une délégation à l’échelle du domaine. Si votre application gère déjà les jetons de l’API Google, transmettez plutôt accessToken ou getAccessToken.
Si user.groups est déjà un tableau, MastraRBACGoogle utilise cette valeur et n’appelle pas l’API Directory. Un tableau groups vide signifie que l’utilisateur ne possède aucun rôle de groupe Google ; les permissions _default lui sont alors attribuées si _default est configuré.
MastraRBACGoogle ne lit pas automatiquement les variables d’environnement du compte de service. Transmettez les identifiants du compte de service au moyen de l’option serviceAccount, ou fournissez accessToken ou getAccessToken.