跳到内容
从 NextAuth.js v4 迁移?阅读 我们的迁移指南.
指南集成第三方后端

集成第三方后端

通过提供商登录时,您可以使用接收到的 OAuth 令牌来验证第三方 API。这些令牌可用于授权对支持相应提供商的后端的请求。

例如

  • GitHub 的 access_token 将为您提供对 GitHub API 的访问权限。
  • 自托管提供商(如 Keycloakoidc-provider 等)可用于授权自定义第三方后端。

将令牌存储在会话中

令牌在 jwt 回调的 account 参数中提供。要将它们存储在会话中,可以先将它们附加到令牌。

jwt({ token, trigger, session, account }) {
  if (account?.provider === "my-provider") {
    return { ...token, accessToken: account.access_token }
  }
  // ...
}

为了在进行 API 请求时访问令牌,需要将其提供给 Auth.js 会话。

async session({ session, token }) {
  session.accessToken = token.accessToken
  return session
}

使用令牌进行授权 API 请求

OAuth 令牌通常附加为 Authorization: Bearer <> 标头。建议在服务器端附加此标头,例如在 路由处理程序 中。

export async function handler(request: NextRequest) {
  const session = await auth()
  return await fetch(/*<your-backend-url>/api/authenticated/greeting*/, {
    headers: { "Authorization":  `Bearer ${session?.accessToken}` }
  })
  // ...
}

配置后端以通过您的提供商授权请求

查阅您的后端框架文档,了解如何验证传入的访问令牌。下面是一个使用 Express.js 和 Keycloak 实例的 示例

const app = express()
const jwtCheck = jwt({
  secret: jwks.expressJwtSecret({
    cache: true,
    rateLimit: true,
    jwksRequestsPerMinute: 5,
    jwksUri:
      "https://keycloak.authjs.dev/realms/master/protocol/openid-connect/certs",
  }),
  issuer: "https://keycloak.authjs.dev/realms/master",
  algorithms: ["RS256"],
})
app.get("*", jwtCheck, (req, res) => {
  const name = req.auth?.name ?? "unknown name"
  res.json({ greeting: `Hello, ${name}!` })
})
// ...

资源

  • 可以在 此处 找到针对不同后端框架的更多示例。
  • next-auth-example 中可以找到有关如何将客户端应用程序与第三方 API 集成的完整示例。
  • Keycloak - 用于现代应用程序和服务的开源身份和访问管理
  • oidc-provider - 用于 Node.js 的 OpenID Certified™ OAuth 2.0 授权服务器实现
Auth.js © Balázs Orbán 和团队 -2024