2016-05-19 3 views
3

私のAzure AD B2Cディレクトリに電子メールアドレスがすでに登録されているかどうか調べています。電子メールアドレスでユーザを検索

var token = await this.GetTokenAsync(); 

var client = new HttpClient(); 

var id = HttpUtility.UrlEncode("adrian_mydomain.com#EXT#@xxxxxxxxx.onmicrosoft.com"); 
////var id = HttpUtility.UrlEncode("[email protected]"); // This also fails. 
////var id = HttpUtility.UrlEncode("adrian_mydomain.com#EXT#"); // This also fails. 
////var id = "xxxx-xxxx-xxxxxxxx-xxxxxxxxxx"; // This also fails (user object id). 

var resource = $"{this.graphConfig.GraphUri}/{this.graphConfig.Tenant}/users/{id}?api-version=1.6"; 
//// This line below works, it returns all the users, so I do know the token is good and the resource URI is valid, etc. 
////var resource = $"{this.graphConfig.GraphUri}/{this.graphConfig.Tenant}/users?api-version=1.6"; 

var request = new HttpRequestMessage(HttpMethod.Get, resource); 
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); 

var response = await client.SendAsync(request); 
var content = await response.Content.ReadAsStringAsync(); 

すべてのユーザーを取得したときに電子メールアドレスがエンコードされているのと同じ方法でメールアドレスをエンコードしています。私はそれが電子メールアドレスで問い合わせることさえ可能であるならば、私が近いと感じている。

現在、私が試したすべてのことは、400または404のいずれかを返します。電子メールアドレス(サインイン名)でクエリする方法があれば、誰も知っていますか?同様のテーマで

EDIT

、私も無駄にユーザーのパスワードを変更するには、クエリをしようとしています。私はクエリを1つのために働かせることができると私は、私はそれを他の上で働くことができると思う。

答えて

2

がB2C.exeの実装を見てみましょう、最初にその作業を取得: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

は、ユーザーがいない電子メールで、GUIDまたはUPNによって参照されていることがわかります! メールのメールアドレスを照会するには、コレクションにsignInNames

あり、フィルタを指定する必要があります。GetUsersと https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations#GetUsers

スタート(すべてのユーザーを取得する)、その後、パスワードを更新し、フィルタ続きます。

+0

ありがとう、私は私の質問にそれを含めていないが、私はユーザーオブジェクトを使用して試しても、喜びを取得していません。私はしかし、すべてのユーザーのリストを正常に取得できます。 –

+0

ユーザーを追加できますか?あなたが送信したjsonの問題の可能性が最も高いですが、それはどうですか? –

+0

はい私はユーザーをうまく追加できます。私は正確に必要なコンテンツを送信し、ユーザーは正常に作成されます。また、すべてのユーザーに対してGETリクエストを行うこともできます。しかし、依然として単一のユーザーの詳細を取得することはできません。 –

4

odataであるため、odata構文を使用して問合せできます。 ODATA構文here

var queryString = HttpUtility.ParseQueryString(string.Empty); 
queryString["api-version"] = "1.6"; 
queryString["$filter"] = "signInNames/any(x:x/value eq '[email protected]')"; 

string url = "https://graph.windows.net/" + tenant + "/users"+ "?" + queryString; 

$フィルタートリック

のqueryString [ "$フィルタ"] =やった "signInNames /任意の(X:X /値EQ '[email protected]を')" ;

関連する問題