私たちはB2Cを使用しており、顧客番号をユーザーに拡張フィールドとして格納しています。 1人のユーザーは1人以上の顧客を持つことができ、コンマで区切られた文字列で格納されます。私が今やっている何をユーザーのカスタムプロパティでActive Directory B2Cを検索する
は非常に非効率的である:それらが所望の拡張プロパティを持っている場合、それは私が望む顧客が含まれている場合 1.各ユーザー 3.確認の上、すべてのユーザーが 2.取得の拡張プロパティを取得します。 4.必要なユーザーのリストを作成します。
AdClientが、私はAdClientのを使用してのActiveDirectoryに1つのクエリでこれを行うことができるようにしたいIActiveDirectoryClient
var users = (await GetAllElementsInPagedCollection(await AdClient.Users.ExecuteAsync())).ToList();
var customersUsers = users.Where(user => user.AccountEnabled.HasValue && user.AccountEnabled.Value).Where(user =>
{
var extendedProperty = ((User) user).GetExtendedProperties().FirstOrDefault(extProp => extProp.Key == customersExtendedProperty.Name).Value?.ToString();
return extendedProperty != null && extendedProperty.Contains(customerId);
}).ToList();
です。これを試してみると、メソッドがサポートされていないというエラーが発生します。これは、クエリがActive Directoryを照会するためにシーンの裏に構築されていると仮定した場合に意味があります。
編集 - 追加情報:
私はこのようなグラフAPIを照会することができました:
var authContext = await ActiveDirectoryClientFactory.GetAuthenticationContext(AuthConfiguration.Tenant,
AuthConfiguration.GraphUrl, AuthConfiguration.ClientId, AuthConfiguration.ClientSecret);
var url = $"https://graph.windows.net:443/hansaborgb2c.onmicrosoft.com/users?api-version=1.6&$filter={customersExtendedProperty.Name} eq '{customerId}'";
var users = await _graphApiHttpService.GetAll<User>(url, authContext.AccessToken);
しかし、私の例では、私はフィルタリングするsubstringofを使用する必要があるが、これはサポートされていません。 Azure Graph APIによる。
からノーマルたDirectorySearcherクラスを使用することになり、それが「extension_guid_someName」形式の名前を持つextenionプロパティですか?そして、拡張機能はどのようにユーザーアカウントに置かれますか?それはGraph APIを通してですか? (すなわち、ユーザーはAD B2Cによって作成され、それを更新するためにGraph APIが使用されますか?) –
はい、拡張フィールドでは、その形式の拡張プロパティを意味します。これらはグラフAPIを使用して作成されるか、より正確にはActiveDirectoryClientクラスを使用しており、これはバックグラウンドでGraph APIを使用していると仮定しています。 – ruffen
はい、ActiveDirectoryClientはGraph APIをラップします。 ActiveDirectoryClient.Context.ExecuteAsyncまでの生のインターフェイスにアクセスして、@ nboettcherの回答からクエリを実行できます。しかし、$ filterは 'contains'演算をサポートせず、複数の値を持つプロパティに対しては 'startswith'と 'any'のみをサポートします(そして、複数値の拡張プロパティを作成することはできません):(将来、 (Azure AD Graph APIではなくMicrosoftがMicrosoft Graph APIへの動きを発表しました) –
Aloraman