13

バックグラウンド

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 トークンにはプロパティが含まれていません。それ以来、ヴィットリオからのこのツイートを読んで、groupMembershipClaimsSecurityGroup

暗黙的な許可は、クエリ文字列でトークンを返すため、これらのクレームを送信しません。最大長を超えて簡単に吹き飛ばすことができます。

さらに調査したところ、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 テナントに直接認証する必要がありますか?

4

1 に答える 1

4

ここで混乱をお詫びします。超過分に関する声明を再確認しますが、いずれにせよ - 迅速にブロックを解除するために、超過分請求の助けを借りずに手動でグループを取得する必要があると仮定しましょう. Web API に送信したトークンを再利用することはできません。そのトークンはアプリにスコープされ、他の受信者はそれを拒否します (または拒否する必要があります)。幸いなことに、バックエンドがグラフをスコープとする新しいトークンをリクエストできるフローは簡単に実装できます。https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNetを参照してください- あなたの場合の詳細は少し異なります (Web API にはアプリの対象ユーザー == クライアント ID があります) が、トポロジとコード/呼び出し関係するものはまったく同じです。チッ!V.

于 2015-04-21T09:09:18.503 に答える