私は、当社の全従業員の電子メールアドレスのリストを作成しようとしています。 これはAzureで実行中のWebアプリケーションで、Azure AD認証を使用しています。アプリは.NET Framework 4.6を使用し、Microsoft.Owin.Security
パッケージを使用してAzure ADに接続します。アクセス権が制限されたAzure ADから基本的なUserInfoのみを照会してください
私は認証することができますが、私はアプリの登録で定義された私の役割によって許可されています。ここまでは順調ですね。 自分のユーザープロフィールをチェックアウトできます。これは、Microsoft.Azure.ActiveDirectory.GraphClient
パッケージを使用して、HTTPRequestsを手動で作成するのではなく、クエリを作成します。
string userObjectID = ClaimsPrincipal.Current
.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot,
async() => await authorizationHelper.GetTokenForApplication());
var result = await activeDirectoryClient.Users
.Where(u => u.ObjectId.Equals(userObjectID))
.ExecuteAsync();
IUser user = result.CurrentPage.ToList().First();
ADは、私のクエリを計算し、それは私だけを返すことを見て、私は自分の情報を表示させて頂くことを推論します。実行は成功し、私だけを返します。別のページで
、私は次のことを試してください(など、ユーザーがタグに先行入力し、existanceをチェックする)会社で使用されるメールアドレスを表示したい:
result = await activeDirectoryClient.Users
.ExecuteAsync();
return result.CurrentPage
.ToList();
この失敗する、 "不十分な権限"。私は推測するユーザー全体を表示することは許可されていません。私の委任権限はmeaning、「すべてのユーザーの基本的なプロフィールを読む」になっている:
はアプリがログインしているユーザーに代わって 組織内のすべてのユーザーの基本的なプロフィールを読み取ることができます。次のプロパティ は、ユーザーの基本プロファイル(表示名、姓名、 写真、電子メールアドレス)で構成されています。
だから、私はフィルタリングしよう:
result = await activeDirectoryClient.Users
.Where(u => u.Mail.StartsWith(str))
.ExecuteAsync();
return result.CurrentPage
.ToList();
が、それはまだ私に全体のユーザーを与える、と私はまだ、再び「不十分な権限」でヒットしています。だから私は
GenericArguments[1], System.String, Microsoft.Azure.ActiveDirectory.GraphClient.Extensions
.ReadOnlyQueryableSet.`2[TSource,TISource] conflicts with type TISource.
(オランダ語から意訳)不可解なランタイムエラーを与える
result = await activeDirectoryClient.Users
.Where(u => u.Mail.StartsWith(str))
.Select (u => u.Mail)
.ExecuteAsync();
return result.CurrentPage
.ToList();
を試してみて、私は途方に暮れています。 ActiveDirectoryClient
と通常のグラフAPIで利用できるソースコードはありませんdoesn't even mention selecting only basic info.
「簡単な」ソリューションは、「もっと多くのアプリのアクセス許可を取得する」ことですが、それは官僚制を通過するには多くの時間が必要です。そして、私ははすべてのユーザーのメールを取得することができますか?
'GetTokenForApplication'関数を表示してください。 [online tool](https://jwt.io/)を使用してアクセストークンを解読し、 'scp'claimのパーミッションを確認してください。 –
非常に便利ですが、私は現地作業版とwebapp版から得たトークンを比較できるようになりました。私はパーミッションが不足していた、ボックスはチェックされたがパーミッションは決して与えられなかった*。一口。 – Wolfzoon