集成第三方后端
通过提供商登录时,您可以使用接收到的 OAuth 令牌来验证第三方 API。这些令牌可用于授权对支持相应提供商的后端的请求。
例如
- GitHub 的
access_token
将为您提供对 GitHub API 的访问权限。 - 自托管提供商(如 Keycloak、
oidc-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 授权服务器实现