實際上它非常簡單(假設您已經過身份驗證)。以此爲模板的GET請求:
{baseUrl}/{tenantId}/users/{oid}?api-version={api-version}
不要忘了你的承載令牌添加到Authorization頭:
Authorization: Bearer {accessToken}
而且,這裏是一個對象,你可以使用的一個例子爲響應(在Java中),與檢索註冊電子郵件一些有用的方法(假設你使用內置的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」來過濾並遍歷結果。
{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}')
它返回一個JSON對象是這樣的:
{
"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."
}
}
您仍然有查詢的結果匹配您的數據庫結果,這將是一項繁重的操作的問題。 如果你需要運行更快的操作,我建議你使用緩存結果在表中進行連接。 它確實感到kludgey,但只是因爲它。
還有一些可以使用的B2C azure powershell模塊的powershell命令,您可以使用ADAL在SQL Server中創建一個用於更新表或視圖內容的作業。
文檔是在這裏:https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet
謝謝您的建議Pytry - 我已經有代碼,可以調用使用GET認證與每個OID要求每行的API。我的觀點是,我需要在網頁的輸出結果中每行執行一次。這感覺非常低效,所以我一直在尋找緩解這種方式的方法 - 一次性傳遞一堆oid的方式? – RNDThoughts
這最終成爲我與之一起的方式,但感覺不太正確。 – RNDThoughts
很抱歉沒有及時回覆(忙)。您還可以添加一個查詢以同時獲取多個用戶,然後運行其他篩選器/驗證以使其與來自SQL Server的數據相匹配。沒有人知道這種操作的沉重感。如果你需要快速訪問結果,然後開始尋找緩存。給我一點(希望今天)更新我的答案,包括多個結果查詢。 – Pytry