Classe MastraAuthWorkos
La classe MastraAuthWorkos fournit à Mastra une authentification fondée sur WorkOS. Elle vérifie les requêtes entrantes au moyen de tokens d’accès WorkOS et s’intègre au serveur Mastra à l’aide de l’option auth.
Exemple d’utilisationLien direct vers Exemple d’utilisation
import { Mastra } from '@mastra/core'
import { MastraAuthWorkos } from '@mastra/auth-workos'
export const mastra = new Mastra({
server: {
auth: new MastraAuthWorkos({
apiKey: process.env.WORKOS_API_KEY,
clientId: process.env.WORKOS_CLIENT_ID,
}),
},
})
Vous pouvez omettre les paramètres du constructeur si les variables d’environnement requises (WORKOS_API_KEY et WORKOS_CLIENT_ID) sont définies. Dans ce cas, utilisez new MastraAuthWorkos() sans aucun argument.
Paramètres du constructeurLien direct vers Paramètres du constructeur
apiKey?:
clientId?:
name?:
redirectUri?:
fetchMemberships?:
true lorsque vous utilisez MastraFGAWorkos, afin que les vérifications FGA puissent résoudre l’ID d’appartenance à l’organisation approprié.trustJwtClaims?:
WorkOSUser, même lorsque workos.userManagement.getUser() ne s’applique pas. Utilisez cette option pour les tokens de comptes de service ou machine à machine fondés sur un modèle JWT WorkOS personnalisé.jwtClaims?:
WorkOSUser authentifié. Utile pour les modèles JWT personnalisés qui incluent organizationMembershipId ou d’autres claims propres à FGA.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 :
WORKOS_API_KEY?:
WORKOS_CLIENT_ID?:
WORKOS_REDIRECT_URI?:
Comportement d’autorisation par défautLien direct vers Comportement d’autorisation par défaut
Par défaut, MastraAuthWorkos autorise tout utilisateur WorkOS authentifié dont l’objet utilisateur résolu contient à la fois id et workosId.
- Vérification du token : le token d’accès est vérifié auprès de WorkOS afin de s’assurer qu’il est valide et n’a pas expiré
- Récupération de l’utilisateur : les informations de l’utilisateur sont extraites du token vérifié
- Décision d’autorisation : l’accès est accordé si l’utilisateur résolu contient les identifiants requis
Par défaut, MastraAuthWorkos agit comme un Provider d’authentification et non comme un filtre fondé sur les rôles.
Chargement des appartenances pour FGALien direct vers Chargement des appartenances pour FGA
Définissez fetchMemberships: true lorsque vous utilisez MastraFGAWorkos. Cette option charge les appartenances de l’utilisateur aux organisations WorkOS pendant l’authentification, afin que les vérifications FGA puissent résoudre l’ID d’appartenance à l’organisation approprié.
Lorsque fetchMemberships vaut false, Mastra omet l’appel WorkOS supplémentaire à listOrganizationMemberships() pour chaque requête authentifiée.
Tokens de service et claims JWTLien direct vers Tokens de service et claims JWT
Si votre modèle JWT WorkOS inclut des claims personnalisés, vous pouvez les associer directement au WorkOSUser authentifié.
import { MastraAuthWorkos } from '@mastra/auth-workos'
const auth = new MastraAuthWorkos({
apiKey: process.env.WORKOS_API_KEY,
clientId: process.env.WORKOS_CLIENT_ID,
redirectUri: process.env.WORKOS_REDIRECT_URI,
trustJwtClaims: true,
jwtClaims: {
organizationId: 'org_id',
organizationMembershipId: 'urn:mastra:organization_membership_id',
},
})
Lorsque trustJwtClaims est activé, Mastra peut authentifier les bearer tokens vérifiés des principaux de service, même si getUser() n’est pas le chemin de recherche approprié. Il s’agit de la méthode recommandée pour transmettre des valeurs organizationMembershipId déjà résolues aux vérifications FGA dans les flux machine à machine.
Autorisation personnaliséeLien direct vers Autorisation personnalisée
Si vous avez besoin d’une autorisation plus stricte, créez une sous-classe de MastraAuthWorkos et remplacez authorizeUser() :
import { MastraAuthWorkos } from '@mastra/auth-workos'
import type { HonoRequest } from 'hono'
class AdminOnlyWorkosAuth extends MastraAuthWorkos {
async authorizeUser(user: any, _request: HonoRequest): Promise<boolean> {
return user?.metadata?.role === 'admin'
}
}
Type d’utilisateur WorkOSLien direct vers Type d’utilisateur WorkOS
Le type WorkOSUser disponible dans authorizeUser() et dans les autres hooks d’authentification WorkOS comprend les champs utilisateur normalisés de Mastra, ainsi que des métadonnées propres à WorkOS. WorkOS permet également aux administrateurs de configurer des modèles JWT personnalisés ; la structure exacte peut donc varier selon votre configuration. L’exemple suivant illustre l’aspect possible d’un objet utilisateur fondé sur WorkOS :
{
'urn:myapp:full_name': 'John Doe',
'urn:myapp:email': 'john.doe@example.com',
'urn:myapp:organization_tier': 'bronze',
'urn:myapp:user_language': 'en',
'urn:myapp:organization_domain': 'example.com',
iss: 'https://api.workos.com/user_management/client_01ABC123DEF456GHI789JKL012',
sub: 'user_01XYZ789ABC123DEF456GHI012',
sid: 'session_01PQR456STU789VWX012YZA345',
jti: '01MNO678PQR901STU234VWX567',
org_id: 'org_01DEF234GHI567JKL890MNO123',
role: 'member',
roles: [ 'member' ],
permissions: [],
exp: 1758290589,
iat: 1758290289
}
Les propriétés dotées du préfixe urn:myapp: sont des claims personnalisés configurés dans votre modèle JWT WorkOS. Les claims JWT standard comprennent sub (ID utilisateur), iss (émetteur), exp (expiration), ainsi que des claims propres à WorkOS tels que org_id, role et roles.