メインコンテンツへ移動

Clerk

@mastra/auth-clerk パッケージは、Clerk を使用した Mastra の認証を提供します。Clerk の認証システムを使用して受信リクエストを検証し、auth オプションを介して Mastra サーバーと統合します。

前提条件
前提条件への直接リンク

この例では Clerk 認証を使用します。Clerk の認証情報を .env ファイルに追加し、Clerk プロジェクトが正しく設定されていることを確認してください。

.env
CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
CLERK_JWKS_URI=https://your-clerk-domain.clerk.accounts.dev/.well-known/jwks.json
注記

これらのキーは Clerk Dashboard の「API Keys」で確認できます。

インストール
インストールへの直接リンク

MastraAuthClerk クラスを使用するには、@mastra/auth-clerk パッケージをインストールする必要があります。

npm install @mastra/auth-clerk@latest

使用例
使用例への直接リンク

src/mastra/index.ts
import { Mastra } from '@mastra/core'
import { MastraAuthClerk } from '@mastra/auth-clerk'

export const mastra = new Mastra({
server: {
auth: new MastraAuthClerk({
publishableKey: process.env.CLERK_PUBLISHABLE_KEY,
secretKey: process.env.CLERK_SECRET_KEY,
jwksUri: process.env.CLERK_JWKS_URI,
}),
},
})
情報

デフォルトの authorizeUser メソッドでは、認証済みのすべてのユーザーが許可されます。ユーザー認可をカスタマイズするには、Provider の作成時にカスタム authorizeUser 関数を指定します。

利用可能なすべての設定オプションについては、MastraAuthClerkを参照してください。

クライアント側の設定
クライアント側の設定への直接リンク

Clerk 認証を使用する場合は、クライアント側で Clerk からアクセストークンを取得し、Mastra へのリクエストに渡す必要があります。

アクセストークンの取得
アクセストークンの取得への直接リンク

Clerk の React hooks を使用してユーザーを認証し、アクセストークンを取得します。

lib/auth.ts
import { useAuth } from '@clerk/nextjs'

export const useClerkAuth = () => {
const { getToken } = useAuth()

const getAccessToken = async () => {
const token = await getToken()
return token
}

return { getAccessToken }
}

詳しくは、Clerk のドキュメントを参照してください。

MastraClient の設定
configuring-mastraclientへの直接リンク

auth が有効な場合、MastraClient から送信するすべてのリクエストで、有効な Clerk アクセストークンを Authorization ヘッダーに含める必要があります。

lib/mastra/mastra-client.ts
import { MastraClient } from '@mastra/client-js'

export const mastraClient = new MastraClient({
baseUrl: 'https://<mastra-api-url>',
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
情報

Authorization ヘッダー内のアクセストークンには、Bearer プレフィックスが必要です。

その他の設定オプションについては、Mastra Client SDKを参照してください。

認証済みリクエストの送信
認証済みリクエストの送信への直接リンク

Clerk アクセストークンを使って MastraClient を設定すると、認証済みリクエストを送信できます。

src/components/test-agent.tsx
'use client'

import { useAuth } from '@clerk/nextjs'
import { MastraClient } from '@mastra/client-js'

export const TestAgent = () => {
const { getToken } = useAuth()

async function handleClick() {
const token = await getToken()

const client = new MastraClient({
baseUrl: 'http://localhost:4111',
headers: token ? { Authorization: `Bearer ${token}` } : undefined,
})

const weatherAgent = client.getAgent('weatherAgent')
const response = await weatherAgent.generate("What's the weather like in New York")

console.log({ response })
}

return <button onClick={handleClick}>Test Agent</button>
}