コンテンツへスキップ
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 <>ヘッダーとして添付されます。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}` }
  })
  // ...
}

プロバイダーを介してリクエストを承認するようにバックエンドを設定する

受信したアクセストークンを検証する方法については、バックエンドフレームワークのドキュメントを参照してください。以下は、で、Keycloakインスタンスを使用するExpress.jsを使用しています。

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 and Team -2024