web-dev-qa-db-ja.com

Microsoftグラフからすべてのユーザープロパティを取得する

ローカルADを使用してユーザー情報を取得したアプリケーションがあります。一部のお客様は、クラウドへの移行を望んでおり、Azure ADを使用しています。アプリを拡張してowin経由でユーザーをサインインし、Microsoft Graph経由でユーザーを取得しています。

ただし、Microsoft Graphから完全なユーザープロファイルを取得することはできません。基本的なプロパティだけでなく、ユーザーのすべてのプロパティをフェッチする必要があります。

var client = new RestClient(string.Format("https://graph.Microsoft.com/v1.0/users/{0}", userEmail));
request = new RestRequest();
request.Method = Method.GET;
request.AddHeader("Authorization", _token.Token);
var reponse = client.Execute(request);

ただし、これは一部の情報を提供するだけです。たとえば、これから「Department」を取得できません。 Azureでここに何を返す必要があるかを構成することは可能ですか?または、/users/以外のものが必要ですか?

顧客ごとに、フェッチする必要のある特別なプロパティが異なる場合があります。したがって、最善の解決策は、Azure広告では標準ではない特別なプロパティを含め、すべてを呼び出して取得するエンドポイントを持つことです。その後、私の側でそれを解析できます。これは可能ですか?

アプリは、基本プロファイルと完全プロファイルの両方を読み取る権限を持っています。さらに何か必要ですか?

7
user2235494

これがGraph APIの通常の動作です。ドキュメント here と次の抜粋を参照してください。

デフォルトでは、限られたプロパティセットのみが返されます(businessPhonesdisplayNamegivenNameidjobTitlemailmobilePhoneofficeLocationpreferredLanguagesurnameuserPrincipalName)。

代替プロパティセットを返すには、OData $selectクエリパラメータを使用して、必要なユーザープロパティのセットを指定する必要があります。たとえば、displayName、givenName、postalCodeを返すには、クエリに次を追加します$select=displayName,givenName,postalCode

$select=*はGraph API実装でキーフィールドのみを出力するため、selectですべてのフィールドを指定する必要があります。

そのため、要求した内容(変数のカスタムフィールド)を取得できません。

ユーザーのフィールドに関する詳細情報を見つけることができます ここ

9
Nicolas R

NicolasRですでに述べたように、「$ select」パラメーターを使用して、取得するすべてのフィールドをリストする必要があります。代わりに、カスタムフィールドを取得する場合は、それらを前のパラメーターに追加するか(名前がわかっている場合)、「$ expand = extensions」を使用できます。

1