これはかなり簡単です(すでに認証されていると仮定します)。 GETリクエストのためのテンプレートとしてこれを使用します。
{baseUrl}/{tenantId}/users/{oid}?api-version={api-version}
は、Authorizationヘッダーにごベアラトークンを追加することを忘れないでください:
Authorization: Bearer {accessToken}
はまた、ここにあなたが使用する可能性のあるオブジェクトの例です。 (Javaで)応答のために、(あなたがGoogleのような代わりに、サードパーティのB2Cのユーザーに建て使用していると仮定)サインアップの電子メールを取得するためのいくつかの有用な方法で:
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.ArrayList;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public class GraphApiUserExample{
@JsonProperty("objectId")
private String id;
private Boolean accountEnabled;
private com.brmic.azure.graph.api.client.model.PasswordProfile PasswordProfile;
private List<SignInName> signInNames;
private String surname;
private String displayName;
private String givenName;
@JsonProperty("userPrincipalName")
private String userPrincipalName;
public String getId(){
return id;
}
public void setId(final String id){
this.id = id;
}
public Boolean getAccountEnabled(){
return accountEnabled;
}
public void setAccountEnabled(final Boolean accountEnabled){
this.accountEnabled = accountEnabled;
}
public com.brmic.azure.graph.api.client.model.PasswordProfile getPasswordProfile(){
return PasswordProfile;
}
public void setPasswordProfile(final com.brmic.azure.graph.api.client.model.PasswordProfile passwordProfile){
PasswordProfile = passwordProfile;
}
public List<SignInName> getSignInNames(){
return signInNames;
}
public void setSignInNames(final List<SignInName> signInNames){
this.signInNames = signInNames;
}
public String getSurname(){
return surname;
}
public void setSurname(final String surname){
this.surname = surname;
}
public String getDisplayName(){
return displayName;
}
public void setDisplayName(final String displayName){
this.displayName = displayName;
}
public String getGivenName(){
return givenName;
}
public void setGivenName(final String givenName){
this.givenName = givenName;
}
public String getUserPrincipalName(){
return userPrincipalName;
}
public void setUserPrincipalName(final String userPrincipalName){
this.userPrincipalName = userPrincipalName;
}
@JsonIgnore
public String getSignInEmail(){
String email = "";
if(signInNames != null){
for(SignInName signInName : signInNames){
if(signInName.getType().equals("emailAddress")){
email = signInName.getValue();
break;
}
}
}
return email;
}
@JsonIgnore
public void setSignInEmail(String signInEmail){
if(signInNames == null){
signInNames = new ArrayList<>();
signInNames.add(new SignInName("emailAddress", signInEmail));
return;
}
for(SignInName signInName : signInNames){
if(signInName.getType().equals("emailAddress")){
signInName.setValue(signInEmail);
break;
}
}
}
}
あなたはPUにしたい場合複数のユーザーがいる場合は、 'oid'の代わりにクエリを追加して、フィルタリングして結果をページできます。このようなJSONオブジェクトを返します
{baseUrl}/{tenantId}/users?api-version={api-version}&$skiptoken={skiptoken}&$top={top}&$filter={attributeOne} eq '{valueOne}'
{baseUrl}/{tenantId}/users?api-version={api-version}&$skiptoken={skiptoken}&$top={top}$filter=signInNames/any(x:x/value eq '{email}')
:
{
"users":[...],
"odata":{
"nextLink": "{baseUrl}/{tenantId}/users?api-version={api-version}&$skiptoken={skiptoken}&$top={top}&$filter={attributeOne} eq '{valueOne}'"
"metadata": "I forget if this is just a string or a parsable JSON object."
}
}
あなたはまだ重い操作になるだろう、あなたのDBの結果にクエリの結果を一致させる問題があります。 より高速な操作を実行する必要がある場合は、結合の結果をテーブルにキャッシュすることをお勧めします。 kludgeyを感じますが、それだけであるからです。
使用できるB2C Azure PowerShellモジュールのpowershellコマンドもあります.ADALを使用して、SQL Serverでジョブを作成してテーブルやビューの内容を更新することもできます。
ドキュメントはここにある:あなたの提案Pytryためhttps://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet
おかげで - 私は既に認証が各OIDにGET要求を使用して、行ごとにAPIを呼び出すことができ、コードを持っています。私の主張は、Webページの出力結果で行ごとに1回これを行う必要があるということです。これはひどく非効率的だと感じましたので、私はこれを緩和する方法を探していました - 多分一度に大量のoidを渡すのですか? – RNDThoughts
これは私がそれに行った方法であったが、かなり正しいとは思わない。 – RNDThoughts
すぐにあなたに戻ってこない(申し訳ありません)申し訳ありません。一度に複数のユーザーを取得するクエリを追加し、追加のフィルタ/検証を実行してSQL Serverのデータと照合することもできます。このような操作の重いことを回避することはできません。結果にすばやくアクセスする必要がある場合は、キャッシュの調査を開始します。私の答えを更新して複数の結果クエリを含めるには、ちょっと(うまくいけば今日)。 – Pytry