MastraAuthGoogle クラスと MastraRBACGoogle クラス
MastraAuthGoogle クラスMastraAuthGoogle クラスへの直接リンク
MastraAuthGoogle クラスは、Google Workspace を使用した認証を Mastra に提供します。暗号化されたセッション Cookie を使用する OAuth 2.0 / OIDC ログインフローを実装し、Google ID トークンを検証して、auth オプションを使用して Mastra サーバーと統合します。
使用例使用例への直接リンク
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 クレームと照合します。hostedDomain?:
hd として渡すホストドメインのログインヒント。これはヒントにすぎず、認可には使用されません。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 は、次の順序でリクエストを認証します。
- セッション Cookie。 SSO が有効な場合、Provider は暗号化されたセッション Cookie を読み取り、復号します。有効期限内の有効なセッションによってユーザーが認証されます。
- Google ID トークンへのフォールバック:有効なセッション Cookie がない場合、
Authorizationヘッダーのトークンを Google の JWKS エンドポイントに対して検証します。
認証後、authorizeUser はユーザーに有効な Google ユーザー ID があること、トークンから取得した有効期限を過ぎていないこと、およびドメインが設定されている場合はユーザーの検証済み hd クレームが allowedDomains と一致することを確認します。
認証メソッド認証メソッドへの直接リンク
authenticateToken(token, request?)authenticatetokentoken-requestへの直接リンク
Google ID トークンを認証します。SSO が有効な場合、このメソッドは Bearer トークンを検証する前に、暗号化されたセッション Cookie を確認します。
const user = await auth.authenticateToken(idToken, request)
戻り値:Promise<GoogleUser | null>
getCurrentUser(request)getcurrentuserrequestへの直接リンク
セッション Cookie または Bearer Google ID トークンから認証済みユーザーを返します。
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 トークンは直接検証されるため、この Provider は ID によるユーザー検索を行いません。
const user = await auth.getUser(userId)
戻り値:Promise<GoogleUser | null>
GoogleUser 型googleuser-typeへの直接リンク
GoogleUser 型は、基本の EEUser インターフェースを Google 固有のフィールドで拡張します。
id:
sub クレームを使用します。googleId:
email?:
name?:
avatarUrl?:
hostedDomain?:
hd クレームから取得した Google Workspace ホストドメイン。expiresAt?:
emailVerified?:
groups?:
MastraRBACGoogle クラスMastraRBACGoogle クラスへの直接リンク
MastraRBACGoogle クラスは、Google Workspace グループを Mastra の権限にマッピングします。Google Admin SDK Directory API からユーザーグループを取得し、設定可能なロールマッピングと照合して解決します。MastraAuthGoogle またはその他の認証 Provider と組み合わせて使用します。
RBAC には有効な Enterprise Edition ライセンスが必要です。開発環境ではライセンスなしで動作するためローカルで試すことができますが、本番環境ではライセンスが必要です。詳しくは、営業までお問い合わせください。
使用例使用例への直接リンク
認証 Provider とともに MastraRBACGoogle を使用するには、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: [],
},
}),
},
})
別の認証 Provider で Google Workspace RBAC を使用するには、その Provider のユーザーオブジェクトから Google Directory API のユーザーキーを解決する getUserKey 関数を渡します。
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' を使用します。'*'(フルアクセス)や '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 グループロール ID を返します。
const roles = await rbac.getRoles(user)
戻り値:Promise<string[]>
getPermissions(user)getpermissionsuserへの直接リンク
Google Workspace グループと roleMapping から解決された Mastra の権限を返します。
const permissions = await rbac.getPermissions(user)
戻り値:Promise<string[]>
hasPermission(user, permission)haspermissionuser-permissionへの直接リンク
ユーザーが権限を持っているかどうかを確認します。
const canReadAgents = await rbac.hasPermission(user, 'agents:read')
戻り値:Promise<boolean>
hasRole(user, role)hasroleuser-roleへの直接リンク
ユーザーが特定の Google Workspace グループロールに解決されたかどうかを確認します。
const isAdmin = await rbac.hasRole(user, 'admins@example.com')
戻り値:Promise<boolean>
hasAllPermissions(user, permissions)hasallpermissionsuser-permissionsへの直接リンク
ユーザーが要求されたすべての権限を持っているかどうかを確認します。
const canManageAgents = await rbac.hasAllPermissions(user, ['agents:read', 'agents:update'])
戻り値:Promise<boolean>
hasAnyPermission(user, permissions)hasanypermissionuser-permissionsへの直接リンク
ユーザーが要求された権限を少なくとも1つ持っているかどうかを確認します。
const canReadSomething = await rbac.hasAnyPermission(user, ['agents:read', 'workflows:read'])
戻り値:Promise<boolean>
getAvailableRoles()getavailablerolesへの直接リンク
roleMapping に設定されたロール ID を、_default を除いて返します。
const roles = await rbac.getAvailableRoles()
戻り値:Promise<{ id: string; name: string }[]>
getPermissionsForRole(roleId)getpermissionsforroleroleidへの直接リンク
ロール ID に設定された権限を返します。
const permissions = await rbac.getPermissionsForRole('engineering@example.com')
戻り値:Promise<string[]>
clearCache()clearcacheへの直接リンク
キャッシュされたすべての Google Workspace グループ検索結果を消去します。
rbac.clearCache()
戻り値:void
clearUserCache(userKey)clearusercacheuserkeyへの直接リンク
メールアドレスなど、1つの Directory API ユーザーキーに対応するキャッシュ済みグループ検索結果を消去します。
rbac.clearUserCache('user@example.com')
戻り値:void
getCacheStats()getcachestatsへの直接リンク
現在のグループ検索キャッシュのサイズと最大サイズを返します。
const stats = rbac.getCacheStats()
戻り値:{ size: number; maxSize: number }
追加設定追加設定への直接リンク
MastraRBACGoogle は GET https://admin.googleapis.com/admin/directory/v1/groups?userKey=... を使用し、ページネーションを処理します。本番環境の Google Workspace デプロイではドメイン全体の委任が設定されたサービスアカウントを指定するか、アプリケーションがすでに Google API トークンを管理している場合は accessToken / getAccessToken を渡します。
user.groups がすでに配列である場合、MastraRBACGoogle はその値を使用し、Directory API を呼び出しません。空の groups 配列は、ユーザーに Google グループロールがないことを意味し、_default が設定されていれば、_default の権限に解決されます。
MastraRBACGoogle はサービスアカウントの環境変数を自動的には読み取りません。serviceAccount オプションを通じてサービスアカウントの認証情報を渡すか、accessToken / getAccessToken を渡します。