バックグラウンド
AngularJS フロントエンドと Web API バックエンドを備えたマルチテナント SaaS 製品を Azure で開発しています。認証に Azure AD を使用し、ADAL JS に接続しました (OAuth2 の暗黙的な許可を使用)。マルチテナント アプリケーションであるため、お客様は自分の Azure AD (オンプレミス AD に接続されている場合と接続されていない場合があります) に対して認証を行うことができます。
これまでのところ、これはすべてうまく機能しています。ADAL JS によってユーザーが Azure ログイン ページに移動し、ユーザーが認証されると、OAuth2 トークンが発行されます。この JWT トークンは、Azure からの受信クレームをアプリケーション クレームにマッピングするための独自のクレーム変換プロセスを持つベアラー トークンとして、すべての API 呼び出しと共に送信されます。
クレーム変換プロセスで個々のユーザーを指定するのではなく、AD グループごとに行うようにしています。これにより、お客様はセキュリティ グループを AD に持つことができ、アプリケーションはそれを使用して正しいアプリケーション クレームにマップします。
問題
AAD アプリケーション マニフェストで設定されているgroups
にもかかわらず、受け取る JWT トークンにはプロパティが含まれていません。それ以来、ヴィットリオからのこのツイートを読んで、groupMembershipClaims
SecurityGroup
暗黙的な許可は、クエリ文字列でトークンを返すため、これらのクレームを送信しません。最大長を超えて簡単に吹き飛ばすことができます。
さらに調査したところ、Vittorio からのこの StackOverflow の回答も見つかりました。
私が確認したところ、暗黙の許可の場合、常に超過請求を介してグループを受け取ります。https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNetを参照してください- グループを取得するための超過請求を処理する方法が示されています。
JWT トークンを確認しましたが、超過請求は含まれていません ( および で識別され_claim_names
ます_claim_sources
)。私は間違いなく Azure AD の 2 つのグループのメンバーです。
また、暗黙の許可トークンでグループ情報を取得できるかどうか (直接的または間接的) について、2 つの矛盾するステートメントがあるようです。
質問 1: グループ情報を取得するために使用できる超過請求を取得する必要がありますか? その場合、請求が確実に送られるようにするために何かする必要がありますか?
グラフ API
グラフ API でユーザーへのリンクを使用して超過請求を取得できるかどうか、またはユーザーのグループを取得するためにリンクを手動で作成する必要があるかどうかにかかわらず、グラフ API で認証する方法が少しわかりません。
(ADAL JS から) ベアラー トークンを含む要求を受け取った後、バックエンドからグラフ API に接続する必要があります。
質問 2: 同じベアラー トークンをグラフ API に送信して、そのユーザーのディレクトリ情報を読み取ることはできますか? または、ユーザーではなくアプリケーションのコンテキストで、アプリケーションから Graph API テナントに直接認証する必要がありますか?