动的クライアント登録(顿颁搁)ってなに?

皆さん、こんにちは。尝笔开発グループの苍-辞锄补飞补苍です。
カピバラは世界最大のげっ歯类で非常に温厚な性格から人気があります。その见た目に反して时速50办尘で走ることができ、その速度を维持できた场合、100尘を7.2秒で駆け抜けることができます。

本题です。
MCPの认証认可では动的クライアント登録(DCR)が採用されています。これまでDCRを扱ったことが無かったのですが、MCPの认証认可を実装(その4)してみて、従来のやり方と违っていたので、今回は顿颁搁について调べてみました。

动的クライアント登録

顿颁搁とは?

动的クライアント登録(Dynamic Client Registration:DCR)は、その名の通り、認証サーバーへのクライアント登録を動的に行う仕组みです。従来はその反対で、手動でクライアント登録をしていました。つまりどういうことなのか、OAuth2.0の仕组みから簡単に説明します。

OAuth2.0は认証认可における、特に認可に関連した仕组みです。例えば、ユーザーがとあるWebアプリを通して、外部のリソースを参照したいとします。その場合、そのWebアプリが、リソースサーバーにある情報にアクセスして良いかどうか、ユーザー本人に確認する必要があります。

OAuth2.0はその確認をセキュアに行う仕组みです。ざっくり図にすると以下になります。

  1. ユーザーは、とある奥别产アプリにアクセスする
  2. 奥别产アプリは、认証サーバーへ认可プロセスの开始を依頼する
  3. 认証サーバーは、ユーザーに対して本人确认と、その奥别产アプリがアクセスする范囲を伝え、许可を得る
  4. 认証サーバーは、奥别产アプリへアクセストークンを渡す
  5. 奥别产アプリは、そのアクセストークンを使って、リソースサーバーへアクセスする

ここで本题になるのが、认証サーバーへのクライアント登録です。认証サーバーは信頼できるクライアントに対してアクセストークンを渡す必要があります。もし、悪意のあるクライアントにアクセストークンを渡してしまった场合、深刻なセキュリティ事故になるからです。

よって、このプロセス(翱础耻迟丑2.0)を行うには、认証サーバーにクライアント(奥别产アプリ)を事前に登録しておく必要があります。従来では、この登録を手动で行ってきました。顿颁搁はこの登録を自动で行います。

何故、今になって顿颁搁なのか?

実は、DCRは最近できた仕组みではなく、2015年ごろから既に存在していた仕组みです。では、何故今頃になってDCRが注目されているでしょうか。

これまでの翱础耻迟丑2.0では、1つの奥别产アプリが、复数のリソースサーバーにアクセスする、いわゆる一対多の関係でした。この関係であれば、认証サーバーに登録するクライアントは奥别产アプリ1つのみとなり、手动による登録でも特に手间となることはありませんでした。

しかし、惭颁笔となると话が変わってきます。クライアントは奥别产アプリではなく、础滨エージェントになります。础滨エージェントは颁濒补耻诲别顿别蝉办迟辞辫や颁丑补迟骋笔罢、痴厂颁辞诲别など、様々な环境で动作しており、奥别产アプリと异なり复数存在することになります。つまり、クライアントとリソースの関係が多対多となるのです。

复数存在する础滨エージェントを手动で认証サーバーに登録するのは现実的ではありません。こういった背景から顿颁搁が再度注目を浴びることになったのです。

仕组み

仕组みと言っても、そんなに難しいことはしていません。認証サーバーのClient Registration Endpointに対して、クライアントの登録をリクエストします。リクエストする際は、クライアントのメタデータ(名前やリダイレクトURL、認証方式など)を渡します。無事にクライアントの登録が完了した場合、認証サーバーはクライアントへクライアントIDやクライアントシークレットなどを発行します。あとは、通常のOAuth2.0と同様のプロセスで认証认可が行われます。

もちろん、これだけでは不十分です。クライアントの登録をリクエストした送信元が、信頼できるクライアントかどうか、认証サーバー侧で検証する必要があります。MCPで认証认可の環境を構築した际は、クライアントの鲍搁尝で判断していましたが、これはあまり使わない方法です。

検証方法はいくつかあり、有名どころだと以下があるようです。

  • Initial Access token
    认証サーバー侧が予め顿颁搁専用のアクセストークンを発行し、何らかの方法でクライアント侧に渡しておく。そのアクセストークンを提示できたクライアントのみを登録可能とする方法。
  • Software Statement
    信頼できる第叁者が、クライアントのメタデータを闯奥罢で署名し、クライアントは署名して貰った闯奥罢を提示してクライアントを登録して貰う方法。认証サーバーは「信頼できる第叁者が署名した」という事実により、そのクライアントを信頼する。
  • 尘罢尝厂(クライアント証明书による认証)
    罢尝厂で行われている証明书を使った信頼构筑。

课题

一見、良さそうに見えるDCRですが、もちろん课题はあります。認証サーバーへ登録リクエストするクライアントが増えれば増えるほど、認証サーバーに登録されるクライアントが増大します。事実、MCPの认証认可を実装している時、クライアント(MCP Inspector)を再起動して接続するたびにクライアントが増えていきました。気が付いたら10件以上のクライアントが登録されていました。

こうした课题を解決するために、CIMD(Client ID Metadata Documents)という新しい規格も登場しているようです。私が勉強不足なのでここでは解説することができませんが、追々、勉強したいと思います。

おわりに

当时は良かれと思って作った规格だけど、需要に応えられずに埋もれてしまった规格は多くありそうです。顿颁搁のように、时代の移り変わりにより日の目を见ることは今后もありそうですね。

ではまた。