跳到主要内容

Auth0

@mastra/auth-auth0 包使用 Auth0 为 Mastra 提供身份验证。它使用 Auth0 签发的 JWT 令牌验证传入请求,并通过 auth 选项与 Mastra 服务器集成。

前置条件
前置条件的直接链接

本示例使用 Auth0 身份验证。请确保:

  1. auth0.com 创建 Auth0 账户
  2. 在 Auth0 Dashboard 中设置 Application
  3. 在 Auth0 Dashboard 中配置 API,并设置标识符(audience)
  4. 配置应用允许的回调 URL、Web 来源和注销 URL
.env
AUTH0_DOMAIN=your-tenant.auth0.com
AUTH0_AUDIENCE=your-api-identifier
备注

可以在 Auth0 Dashboard 的 Applications > Settings 下找到域名。audience 是在 Auth0 Dashboard > APIs 中配置的 API 标识符。

有关详细设置说明,请参阅适用于相应平台的 Auth0 快速入门

安装
安装的直接链接

在使用 MastraAuthAuth0 类之前,必须安装 @mastra/auth-auth0 包。

npm install @mastra/auth-auth0@latest

用法示例
用法示例的直接链接

使用环境变量的基本用法
使用环境变量的基本用法的直接链接

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

export const mastra = new Mastra({
server: {
auth: new MastraAuthAuth0(),
},
})

自定义配置
自定义配置的直接链接

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

export const mastra = new Mastra({
server: {
auth: new MastraAuthAuth0({
domain: process.env.AUTH0_DOMAIN,
audience: process.env.AUTH0_AUDIENCE,
}),
},
})

配置
配置的直接链接

用户授权
用户授权的直接链接

默认情况下,MastraAuthAuth0 允许所有持有指定 audience 的有效 Auth0 令牌且已通过身份验证的用户。令牌验证会确保:

  1. 令牌由 Auth0 正确签名
  2. 令牌尚未过期
  3. 令牌 audience 与配置的 audience 匹配
  4. 令牌签发者与 Auth0 域名匹配

要自定义用户授权,请提供自定义 authorizeUser 函数:

src/mastra/auth.ts
import { MastraAuthAuth0 } from '@mastra/auth-auth0'

const auth0Provider = new MastraAuthAuth0({
authorizeUser: async user => {
// Custom authorization logic
return user.email?.endsWith('@yourcompany.com') || false
},
})

有关所有可用配置选项,请参阅 MastraAuthAuth0

客户端设置
客户端设置的直接链接

使用 Auth0 身份验证时,需要设置 Auth0 React SDK、对用户进行身份验证,并获取访问令牌以传递给 Mastra 请求。

设置 Auth0 React SDK
设置 Auth0 React SDK的直接链接

首先,在应用中安装并配置 Auth0 React SDK:

npm install @auth0/auth0-react
src/auth0-provider.tsx
import React from 'react'
import { Auth0Provider } from '@auth0/auth0-react'

const Auth0ProviderWithHistory = ({ children }) => {
return (
<Auth0Provider
domain={process.env.REACT_APP_AUTH0_DOMAIN}
clientId={process.env.REACT_APP_AUTH0_CLIENT_ID}
authorizationParams={{
redirect_uri: window.location.origin,
audience: process.env.REACT_APP_AUTH0_AUDIENCE,
scope: 'read:current_user update:current_user_metadata',
}}
>
{children}
</Auth0Provider>
)
}

export default Auth0ProviderWithHistory

获取访问令牌
获取访问令牌的直接链接

使用 Auth0 React SDK 对用户进行身份验证并获取访问令牌:

lib/auth.ts
import { useAuth0 } from '@auth0/auth0-react'

export const useAuth0Token = () => {
const { getAccessTokenSilently } = useAuth0()

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

return { getAccessToken }
}
备注

有关更多身份验证方法和配置选项,请参阅 Auth0 React SDK 文档

配置 MastraClient
configuring-mastraclient的直接链接

启用 auth 后,使用 MastraClient 发出的所有请求都必须在 Authorization 标头中包含有效的 Auth0 访问令牌:

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

export const createMastraClient = (accessToken: string) => {
return new MastraClient({
baseUrl: 'https://<mastra-api-url>',
headers: {
Authorization: `Bearer ${accessToken}`,
},
})
}
信息

访问令牌在 Authorization 标头中必须带有 Bearer 前缀。

有关更多配置选项,请参阅 Mastra Client SDK

发出经过身份验证的请求
发出经过身份验证的请求的直接链接

使用 Auth0 访问令牌配置 MastraClient 后,即可发送经过身份验证的请求:

src/components/mastra-api-test.tsx
import React, { useState } from 'react'
import { useAuth0 } from '@auth0/auth0-react'
import { MastraClient } from '@mastra/client-js'

export const MastraApiTest = () => {
const { getAccessTokenSilently } = useAuth0()
const [result, setResult] = useState(null)

const callMastraApi = async () => {
const token = await getAccessTokenSilently()

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

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

setResult(response.text)
}

return (
<div>
<button onClick={callMastraApi}>Test Mastra API</button>

{result && (
<div className="result">
<h6>Result:</h6>
<pre>{result}</pre>
</div>
)}
</div>
)
}