MastraAuthGoogle 和 MastraRBACGoogle 类
MastraAuthGoogle 类MastraAuthGoogle 类的直接链接
MastraAuthGoogle 类使用 Google Workspace 为 Mastra 提供身份验证。它实现使用加密 Session cookie 的 OAuth 2.0 / OIDC 登录流程,验证 Google ID token,并使用 auth 选项与 Mastra server 集成。
使用示例使用示例的直接链接
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'],
}),
},
})
如果已设置所需的环境变量,可以省略构造函数参数。在这种情况下,直接使用不带参数的 new MastraAuthGoogle()。
构造函数参数构造函数参数的直接链接
clientId?:
clientSecret?:
redirectUri?:
scopes?:
allowedDomains?:
hd claim 对其进行校验。hostedDomain?:
hd 形式传递给 Google 的托管域登录提示。该值仅用作提示,不用于授权。session?:
cookieName?:
cookieMaxAge?:
cookiePassword?:
secureCookies?:
Secure 标志。name?:
环境变量环境变量的直接链接
未提供构造函数选项时,会自动使用以下环境变量:
GOOGLE_CLIENT_ID:
GOOGLE_CLIENT_SECRET?:
GOOGLE_REDIRECT_URI?:
GOOGLE_COOKIE_PASSWORD?:
GOOGLE_ALLOWED_DOMAINS?:
GOOGLE_HOSTED_DOMAIN?:
身份验证流程身份验证流程的直接链接
MastraAuthGoogle 按以下顺序对请求进行身份验证:
- Session cookie。 启用 SSO 后,Provider 会读取并解密已加密的 Session cookie。有效且未过期的 Session 可完成用户身份验证。
- Google ID token fallback:如果不存在有效的 Session cookie,则根据 Google 的 JWKS endpoint 验证
Authorizationheader 中的 token。
身份验证完成后,authorizeUser 会检查用户是否具有有效的 Google user ID、由 token 得出的过期时间是否尚未到期;如果配置了域,还会检查用户已验证的 hd claim 是否与 allowedDomains 匹配。
身份验证方法身份验证方法的直接链接
authenticateToken(token, request?)authenticatetokentoken-request的直接链接
验证 Google ID token。启用 SSO 后,该方法会先检查加密的 Session cookie,再验证 Bearer token。
const user = await auth.authenticateToken(idToken, request)
返回:Promise<GoogleUser | null>
getCurrentUser(request)getcurrentuserrequest的直接链接
返回通过 Session cookie 或 Bearer Google ID token 验证的用户。
const user = await auth.getCurrentUser(request)
返回:Promise<GoogleUser | null>
authorizeUser(user)authorizeuseruser的直接链接
当用户具有 ID、尚未过期,并且在配置域时与 allowedDomains 匹配,则返回 true。
const allowed = auth.authorizeUser(user)
返回:boolean
getUser(userId)getuseruserid的直接链接
返回 null。Google ID token 会被直接验证,因此该 Provider 不会按 ID 查找用户。
const user = await auth.getUser(userId)
返回:Promise<GoogleUser | null>
GoogleUser 类型googleuser-type的直接链接
GoogleUser 类型扩展了基础 EEUser interface,并增加 Google 专用字段:
id:
sub claim。googleId:
email?:
name?:
avatarUrl?:
hostedDomain?:
hd claim 的 Google Workspace 托管域。expiresAt?:
emailVerified?:
groups?:
MastraRBACGoogle 类MastraRBACGoogle 类的直接链接
MastraRBACGoogle 类将 Google Workspace group 映射到 Mastra permission。它从 Google Admin SDK Directory API 获取用户 group,并根据可配置的 role mapping 进行解析。可以将其与 MastraAuthGoogle 或其他 Auth Provider 搭配使用。
RBAC 需要有效的 Enterprise Edition license。在开发环境中无需 license 即可运行,方便本地试用;生产环境则需要 license。有关详细信息,请联系销售团队。
使用示例使用示例的直接链接
将 MastraRBACGoogle 传给 rbac 选项,即可与 Auth Provider 搭配使用:
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: [],
},
}),
},
})
如果要将 Google Workspace RBAC 与其他 Auth Provider 搭配使用,请传入 getUserKey 函数,从其他 Provider 的用户对象中解析 Google Directory API user key:
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: [],
},
}),
},
})
构造函数参数构造函数参数的直接链接
roleMapping:
'_default' 为不匹配任何 group 的用户分配 permission。支持 '*'(完全访问权限)和 'agents:*'(所有 Agent 操作)等通配符。accessToken?:
getAccessToken?:
serviceAccount?:
clientEmail:
privateKey:
\n 值。privateKeyId?:
subject?:
scopes?:
getUserKey?:
userKey。默认为 user.email。mapGroupToRoles?:
[group.email]。cache?:
maxSize?:
ttlMs?:
RBAC 方法RBAC 方法的直接链接
getRoles(user)getrolesuser的直接链接
返回用户的 Google Workspace group role ID。
const roles = await rbac.getRoles(user)
返回:Promise<string[]>
getPermissions(user)getpermissionsuser的直接链接
返回根据 Google Workspace group 和 roleMapping 解析的 Mastra permission。
const permissions = await rbac.getPermissions(user)
返回:Promise<string[]>
hasPermission(user, permission)haspermissionuser-permission的直接链接
检查用户是否具有某项 permission。
const canReadAgents = await rbac.hasPermission(user, 'agents:read')
返回:Promise<boolean>
hasRole(user, role)hasroleuser-role的直接链接
检查用户是否已解析到指定的 Google Workspace group role。
const isAdmin = await rbac.hasRole(user, 'admins@example.com')
返回:Promise<boolean>
hasAllPermissions(user, permissions)hasallpermissionsuser-permissions的直接链接
检查用户是否具有请求的所有 permission。
const canManageAgents = await rbac.hasAllPermissions(user, ['agents:read', 'agents:update'])
返回:Promise<boolean>
hasAnyPermission(user, permissions)hasanypermissionuser-permissions的直接链接
检查用户是否至少具有一项请求的 permission。
const canReadSomething = await rbac.hasAnyPermission(user, ['agents:read', 'workflows:read'])
返回:Promise<boolean>
getAvailableRoles()getavailableroles的直接链接
返回 roleMapping 中配置的 role ID,不包括 _default。
const roles = await rbac.getAvailableRoles()
返回:Promise<{ id: string; name: string }[]>
getPermissionsForRole(roleId)getpermissionsforroleroleid的直接链接
返回为某个 role ID 配置的 permission。
const permissions = await rbac.getPermissionsForRole('engineering@example.com')
返回:Promise<string[]>
clearCache()clearcache的直接链接
清除所有已缓存的 Google Workspace group 查找结果。
rbac.clearCache()
返回:void
clearUserCache(userKey)clearusercacheuserkey的直接链接
清除一个 Directory API user key(例如电子邮件地址)的已缓存 group 查找结果。
rbac.clearUserCache('user@example.com')
返回:void
getCacheStats()getcachestats的直接链接
返回当前 group 查找 cache 的大小和最大容量。
const stats = rbac.getCacheStats()
返回:{ size: number; maxSize: number }
其他配置其他配置的直接链接
MastraRBACGoogle 使用 GET https://admin.googleapis.com/admin/directory/v1/groups?userKey=... 并处理分页。生产环境部署 Google Workspace 时,请提供具有全域委派能力的 service account;如果应用已自行管理 Google API token,也可以传入 accessToken / getAccessToken。
如果 user.groups 已经是数组,MastraRBACGoogle 会使用该值,而不会调用 Directory API。空的 groups 数组表示用户没有 Google group role;配置 _default 时,会解析为 _default permission。
MastraRBACGoogle 不会自动读取 service account 环境变量。请通过 serviceAccount 选项传入 service account 凭证,或传入 accessToken / getAccessToken。