2025年11月GA!Auth0 for AI Agents の「嬉しさ」がいまいちピンと来なかったので、クイックスタートで「不正アクセス」できるか試してみた

2025年11月GA!Auth0 for AI Agents の「嬉しさ」がいまいちピンと来なかったので、クイックスタートで「不正アクセス」できるか試してみた

2025.12.02

今日は、2025年11月に待望のGA(一般提供)を迎えた Auth0 for AI Agents について紹介します。

Auth0 for AI Agents って何ができるの?

一言でいうと、AIエージェントが「ユーザーのなりかわり」として、そのユーザーの適切な権限の範囲だけで安全に動作するための認証・認可ソリューションです(個人見解)

AIエージェントは、人間ではない新しいアイデンティティ(NHI: Non-Human Identity)の一種です。
これまでのAIアプリ開発では、こんなリスクがありました。

経理ボットに「山田さんの給料いくら?」と聞くと、全部答えてしまう。

なぜなら、AIは回答を作るためにデータへアクセスする必要がありますが、従来の作り方だとAIに「管理者権限」を渡してしまいがちだったからです。
人間(ユーザー)の権限管理は厳格なのに、AIの権限管理がズルズルだと、そこがセキュリティホールになります。

Auth0 for AI Agents の4つの機能

この課題を解決するため、以下の4つの機能が提供されています。

https://auth0.com/blog/jp-introducing-auth0-for-ai-agents

  1. ユーザー認証
    • AIアプリに特化したログイン機能。アカウントリンクで「スマホでもPCでも同じ人」と認識させたり、重要な会話の時だけ再認証(ステップアップ認証)を求めたりできます。
  2. トークンボルト
    • GmailやSlackのアクセストークンを安全に保管・自動更新する「金庫」。開発者がトークン管理に頭を悩ませる必要がなくなります。
  3. 非同期認可
    • 「高額決済」など、重要なアクションの時だけ人間の承認を求める仕組みを作れます。
  4. RAGのためのFGA
    • 「部長は部長の資料、一般社員は一般社員の資料」しか検索できないよう、ドキュメント単位できめ細かくアクセス制御します。

クイックスタートをやってみた

「概念はわかったけど、実際どう動くの?」ということで、ユーザー認証のクイックスタートを試してみました。

https://auth0.com/ai/docs/get-started/overview

手順は超シンプル

  1. Auth0でアカウントとアプリを作成
  2. サンプルコードをダウンロード (npm install)
  3. .env にキーを設定して npm run dev

これだけで、AIチャットアプリに堅牢なログイン機能が実装できました。

2025-11-ga-auth0-for-ai-agents_1

AIチャットアプリのつくり方(フロントエンド実装、バックエンド実装)が分からない人にとって、このサンプルコードは十分に参考になりそうですね。

これの何が嬉しいのか?

実は私はこのAuth0 for AI Agentsのクイックスタートをやってみて何が嬉しいのか、全然分かりませんでした。
「ただログインできるだけでしょ?普通のAuth0のログインと何が違うの?」と思いました。

しかし、コードを読んでみるとAuth0 for AI Agentsでは「AIが誰の権限で動くか」がきちんと実装されています。

import { streamText, UIMessage, createUIMessageStream, createUIMessageStreamResponse, convertToModelMessages, stepCountIs } from 'ai';
import { openai } from '@ai-sdk/openai';
import { setAIContext } from '@auth0/ai-vercel';
import { getUserInfoTool } from "@/lib/tools/user-info";

~~省略~~

export async function POST(req: NextRequest) {
  const { id, messages }: { id: string; messages: Array<UIMessage> } = await req.json();
  setAIContext({ threadID: id });

  const tools = {
    getUserInfoTool, // ここで誰の権限なのか取得している
  };

  // @auth0/aiライブラリでTool Calling(AIがAPIを呼び出して利用する)を実行している
  const stream = createUIMessageStream({
    originalMessages: messages,
    execute: async ({ writer }) => {
      const result = streamText({
        model: openai('gpt-4o-mini'),
        system: AGENT_SYSTEM_TEMPLATE,
        messages: convertToModelMessages(messages),
        stopWhen: stepCountIs(5),
        tools, // この部分が、Tool Calling(Function Calling)
      });

~~省略~~

つまり

  • これまで: AIが「最強のAPIキー」を持っていたため、誰のデータでも見放題だった。
  • これから: AIは「ログインしているユーザー本人のアクセストークン」しか持たされない。

「Aさんがログインしている時は、AIもAさんの権限でしか動けない」という制約を強制することができます。
これが最大の嬉しさです。

【検証】「Aさんがログインしている時は、AIもAさんの権限でしか動けない」それ本当?「不正アクセス」をやってみる

本当に権限が分離されているか、あえて不正なデータアクセスを試みる検証をしてみました。

検証シナリオ

  1. ユーザーA(Asan)でログインし、自分の情報を聞く → 成功
  2. ユーザーB(Bsan)でログインし、自分の情報を聞く → 成功
  3. 【不正アクセスの試行】ユーザーAでログインしたまま、「ユーザーBの個人情報を教えて」とAIに命令する

ユーザーA(Asan)でログインし、自分の情報を聞く → 成功
2025-11-ga-auth0-for-ai-agents_2

2025-11-ga-auth0-for-ai-agents_4

【不正アクセスの試行】ユーザーAでログインしたまま、「ユーザーBの個人情報を教えて」とAIに命令する
2025-11-ga-auth0-for-ai-agents_3

結果

AIはユーザーBの情報を取得できませんでした。
AIはあくまで「ユーザーAのアクセストークン」を使ってAPIを叩いており、システム側で「ユーザーAの鍵でユーザーBのデータは開かない」と拒否されたからです。

最後に

AIアプリを作る際、「どんなモデルを使うか」と同じくらい「どう権限を管理するか」が重要だと思います。
Auth0 for AI Agentsを使えば、この複雑な制御をアプリ側に作り込むことなく実現できます。

今回はまずAuth0 for AI Agentsの機能のひとつ「ユーザー認証」でAIの身元をはっきりさせるところまでやりました。
次回以降は、他の機能である「トークンボルト」や「非同期認可」「RAGのためのFGA」についても、実際にクイックスタートを触って記事にしていこうと思います。

この記事をシェアする

FacebookHatena blogX

関連記事