第三者バックエンドとの統合
プロバイダーを介してログインする場合、受信した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 <>
ヘッダーとして添付されます。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認証サーバー実装