B2Bでuアド認証を導入しよう


こんにちはみずあめです。12月に入り、いよいよ苦しくなってきました。私ごとですがあと3ヶ月強で20歳という事で、かなり人生の終わりを感じてきています。エンジニア20歳定年説。 この記事はcoins Advent Calendar 2025の1日目の記事です。

uアド認証、したいですよね?

定期的に筑波大パソコンオタクの間では統一認証を導入したいという話があがります。直近ですと、なぜか今年度から教室情報が認証なしのkdbに載せられなくなり、時間割管理アプリのTwinteでは別で教室データをインポートしなければいけなくなってしまいました。この際などに話に出てきていたのが、筑波大の統一認証を一般公開して欲しいという話です。統一認証の裏にしかない情報を参照したい時などに、別途アプリケーション側に統一認証をおければ便宜上は問題ないはずです。 こちらは実はShibbolethのラッパーを書けばいいので、直ぐにできると思うのですが(技術的には可能ということで政治的な話があるのは理解しています)、現時点ではまだできていないようです。

でこの場合、筑波大学の人間であるのをもう一つの方法で検証することができます。それが、入学時に作らされるuアドによるマイクロソフトアカウント認証です。

AzureB2B

AzureにはBusiness-To-Business(B2B)という機能があります。

まずAzureはテナントという単位で管理されており、皆さんのuアドで作られたマイクロソフトアカウントは筑波大学というテナントにいます。ですが、当然このテナント内の権限などは基本持っていません。そこで新しいテナントを作成し、そこにゲストユーザーとしてuアドアカウントを招待することで、筑波大の人間であることが認証できます。

External Identities | 外部コラボレーションの設定

より、uアドを指定することで、このアドレスだけをゲスト招待できるようになります。B2Bの詳しい説明は以下の記事を参照すると良いと思います。

https://jpazureid.github.io/blog/azure-active-directory/what-is-b2b/

ただ、毎回毎回コンソール画面からユーザーごとに登録していてはキリがありません。そこで使用するのが、Graph APIになります。こちらを使用することで、API経由で自動的にユーザーを自分のテナントに招待できます。

招待のために権限User.Invite.Allとユーザー一覧取得のために User.Read.Allあたりが必要だと思います。 あとは適当にシークレットやコールバックURLを設定します。

招待できるとこんな感じで一覧に表示されます。メンバーになっていますが、私がテナントの人間だからで、ここは普通はゲストと表示されます。

以下の記事などを参考にすると良いと思います。 https://blog.shibayan.jp/entry/20240519/1716107947

実際に作ってみた

今回はCloudflare Workerを使い、uアド認証を持ったdiscord招待アプリケーションをサーバーレスで構築してみました。一応ログをKVに保存しています。コードは以下にあります。 https://github.com/mizuamedesu/entra-auth-discord

実際に試してみたい方は https://chaoslt-auth.mizuame.app/

注意

でもuアドって生涯アドレスだから学生認証にはならない、という話じゃなかったっけ https://x.com/kichi2004_/status/1991925946425938164

などというご指摘を頂戴しました。おっしゃる通りなのですが、普通に学籍番号を取得できるので、ある程度サーバー側で撃ち落とすことが可能だとお思います。

また本記事は絶対に筑波大生であることを保証する方法の紹介ではなく、勝手に統一認証の裏にあるリソースの公開などをしても一切の責任を負いません。大学生限定のSNSの作成とかに使う程度に留めると良いのではないでしょうか。

一覧へ戻る