Okta
@mastra/auth-okta 套件使用 Okta 為 Mastra 提供驗證與角色式存取控制。它支援使用加密工作階段 Cookie 的 OAuth 2.0 / OIDC 登入流程,並將 Okta 群組對應至 Mastra 權限。
先決條件「先決條件」的直接連結
本指南使用 Okta 驗證。請務必:
- 在 okta.com 建立 Okta 帳戶
- 在 Okta Admin Console 中設定 OAuth 應用程式(Web 應用程式、Authorization Code 授權)
- 將重新導向 URI 加入應用程式的登入重新導向 URI
- 建立 API 權杖(RBAC 必須使用)
請確認已設定環境變數。
OKTA_DOMAIN=dev-123456.okta.com
OKTA_CLIENT_ID=your-client-id
OKTA_CLIENT_SECRET=your-client-secret
OKTA_REDIRECT_URI=http://localhost:4111/api/auth/callback
OKTA_COOKIE_PASSWORD=a-random-string-at-least-32-characters-long
OKTA_API_TOKEN=your-api-token
OKTA_COOKIE_PASSWORD 會加密工作階段 Cookie。如果省略,系統會使用無法在伺服器重新啟動後保留的自動產生值。請在正式環境中明確設定。
只有在使用 MastraRBACOkta 將 Okta 群組對應至權限時,才需要 OKTA_API_TOKEN。
安裝「安裝」的直接連結
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/auth-okta
pnpm add @mastra/auth-okta
yarn add @mastra/auth-okta
bun add @mastra/auth-okta
使用範例「使用範例」的直接連結
使用環境變數的基本用法「使用環境變數的基本用法」的直接連結
設定上述環境變數後,所有建構函式參數皆為選用:
import { Mastra } from '@mastra/core'
import { MastraAuthOkta } from '@mastra/auth-okta'
export const mastra = new Mastra({
server: {
auth: new MastraAuthOkta(),
},
})
搭配 RBAC 的驗證「搭配 RBAC 的驗證」的直接連結
加入 MastraRBACOkta,將 Okta 群組對應至 Mastra 權限:
import { Mastra } from '@mastra/core'
import { MastraAuthOkta, MastraRBACOkta } from '@mastra/auth-okta'
export const mastra = new Mastra({
server: {
auth: new MastraAuthOkta(),
rbac: new MastraRBACOkta({
roleMapping: {
Admin: ['*'],
Engineering: ['agents:*', 'workflows:*', 'tools:*'],
Viewer: ['agents:read', 'workflows:read'],
_default: [], // users with unmapped groups get no permissions
},
}),
},
})
跨 Provider 用法「跨 Provider 用法」的直接連結
使用其他驗證 Provider(Auth0、Clerk 等)登入,並使用 Okta 處理 RBAC。請傳入 getUserId 函式,從其他 Provider 的使用者物件解析 Okta 使用者 ID:
import { Mastra } from '@mastra/core'
import { MastraAuthAuth0 } from '@mastra/auth-auth0'
import { MastraRBACOkta } from '@mastra/auth-okta'
export const mastra = new Mastra({
server: {
auth: new MastraAuthAuth0(),
rbac: new MastraRBACOkta({
getUserId: user => user.metadata?.oktaUserId || user.email,
roleMapping: {
Engineering: ['agents:*', 'workflows:*'],
Admin: ['*'],
_default: [],
},
}),
},
})
若要連結不同 Provider 的使用者,請將 Okta 使用者 ID 儲存在其他 Provider 的使用者中繼資料中。Mastra 會使用此 ID 從 Okta 取得群組。
請參閱 MastraAuthOkta,瞭解所有可用的設定選項。
角色對應「角色對應」的直接連結
roleMapping 選項會將 Okta 群組名稱對應至 Mastra 權限字串陣列。權限採用 resource:action 模式並支援萬用字元:
const rbac = new MastraRBACOkta({
roleMapping: {
// full access to everything
Admin: ['*'],
// full access to agents and workflows
Engineering: ['agents:*', 'workflows:*'],
// read-only access
Viewer: ['agents:read', 'workflows:read'],
// users whose groups don't match any key above
_default: [],
},
})
_default 鍵會將權限指派給 Okta 群組不符合任何其他鍵的使用者。
用戶端設定「用戶端設定」的直接連結
啟用驗證後,向 Mastra 路由發出的請求必須通過驗證。MastraAuthOkta 使用 SSO,因此使用者會透過 Okta 託管的登入頁面進行驗證。登入後,系統會自動設定加密的工作階段 Cookie。
Cookie 工作階段(建議)「Cookie 工作階段(建議)」的直接連結
若為跨來源請求(例如在 :3000 執行的前端呼叫位於 :4111 的 Mastra),請在 Mastra 伺服器上啟用 CORS 憑證:
export const mastra = new Mastra({
server: {
auth: new MastraAuthOkta(),
cors: {
origin: 'http://localhost:3000',
credentials: true,
},
},
})
設定用戶端以包含憑證:
import { MastraClient } from '@mastra/client-js'
export const mastraClient = new MastraClient({
baseUrl: 'http://localhost:4111',
credentials: 'include',
})
Bearer 權杖「Bearer 權杖」的直接連結
你也可以將 Okta 存取權杖當作 Bearer 權杖傳送。系統會透過 Okta 的 JWKS 端點驗證權杖:
import { MastraClient } from '@mastra/client-js'
export const createMastraClient = (accessToken: string) => {
return new MastraClient({
baseUrl: 'http://localhost:4111',
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
}
請參閱 Mastra Client SDK,瞭解更多設定選項。
發出已驗證的請求「發出已驗證的請求」的直接連結
- MastraClient
- cURL
import { mastraClient } from '../lib/mastra-client'
const agent = mastraClient.getAgent('weatherAgent')
const response = await agent.generate('Weather in London')
console.log(response)
curl -X POST http://localhost:4111/api/agents/weatherAgent/generate \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <your-okta-access-token>" \
-d '{
"messages": "Weather in London"
}'
疑難排解「疑難排解」的直接連結
- 每個請求都傳回 401:確認 Okta 網域、用戶端 ID 及用戶端密鑰皆正確。檢查 Okta 應用程式中的重新導向 URI 是否符合
OKTA_REDIRECT_URI。 - 跨來源時未傳送 Cookie:在
MastraClient中設定credentials: "include",並以你的前端來源及credentials: true設定server.cors。 - 重新啟動後工作階段遺失:將
OKTA_COOKIE_PASSWORD設為固定值(至少 32 個字元)。如果未設定,系統會使用每次重新啟動時都會變更的自動產生金鑰。 - RBAC 傳回空白權限:確認已設定
OKTA_API_TOKEN,且該權杖具備列出使用者群組的權限。檢查roleMapping中的群組名稱是否與 Okta 群組名稱完全相符。