跳至內容
從 NextAuth.js v4 遷移?請閱讀 我們的遷移指南.
指南整合第三方後端

與第三方後端整合

當透過提供者登入時,您可以使用接收到的 OAuth Token 來驗證第三方 API。這些 Token 可用於授權對支援相應提供者的後端的請求。

例如

  • GitHub 的 access_token 將讓您存取 GitHub 的 API。
  • 自我管理的提供者(例如 Keycloakoidc-provider 等)可用於針對自訂第三方後端進行授權。

將 Token 儲存在 Session 中

Token 會在 jwt 回調的 account 參數中提供。為了將它們儲存在 Session 中,可以先將它們附加到 Token。

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

為了在發出 API 請求時存取 Token,需要讓 Auth.js Session 可用。

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

使用 Token 發出授權 API 請求

OAuth Token 通常會附加為 Authorization: Bearer <> 標頭。建議在伺服器端附加此標頭,例如 Route Handler

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

設定後端以透過您的提供者授權請求

請參閱您的後端框架的文件,了解如何驗證傳入的存取 Token。以下是一個使用 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}!` })
})
// ...

資源

  • 其他後端框架的更多範例可以在這裡找到。
  • 如何在客戶端應用程式中整合第三方 API 的完整範例可以在 next-auth-example 中找到。
  • Keycloak - 適用於現代應用程式和服務的開源身分和存取管理
  • oidc-provider - Node.js 的 OpenID Certified™ OAuth 2.0 授權伺服器實作
Auth.js © Balázs Orbán 與團隊 -2024