0

J'ajoute des utilisateurs à Azure AD B2C avec Graph API mais je ne comprends pas comment stocker les emails des utilisateurs (le principal). Quel champ here est l'adresse e-mail principale de l'utilisateur? Comme je l'ai lu sur SO, il n'y a aucun moyen de remplir les valeurs Informations de contact d'authentificationAzure AD B2C avec API graphique - comment obtenir/définir les courriels de l'utilisateur?

C'est correct?

+0

lire ici manque un lien . FYI. – spottedmahn

+0

Je vois le lien ici ... laissez-moi en ajouter un autre – alvipeo

+0

voyez-vous le lien maintenant? – alvipeo

Répondre

0

Voici comment je le fais:

public async Task<AdUser> GetUserByObjectId(Guid objectId) 
{ 
    string userJson = await SendGraphGetRequest("https://stackoverflow.com/users/" + objectId, null); 
    JObject jUser = JObject.Parse(userJson); 
    return new AdUser(jUser); 
} 

internal AdUser(JObject jUser) 
{ 
    AccountEnabled = jUser["accountEnabled"].Value<bool>(); 
    CompanyName = jUser["companyName"].Value<string>(); 
    Department = jUser["department"].Value<string>(); 
    DisplayName = jUser["displayName"].Value<string>(); 
    FirstName = jUser["givenName"].Value<string>(); 
    JobTitle = jUser["jobTitle"].Value<string>(); 
    LastName = jUser["surname"].Value<string>(); 
    MailNickname = jUser["mailNickname"].Value<string>(); 
    Mobile = jUser["mobile"].Value<string>(); 
    ObjectId = new Guid(jUser["objectId"].Value<string>()); 

    List<string> mailList = new List<string>(jUser["otherMails"].Count()); 
    mailList.AddRange(jUser["otherMails"].Select(mail => mail.Value<string>())); 
    OtherMails = mailList.AsReadOnly(); 

    Phone = jUser["telephoneNumber"].Value<string>(); 

    List<(string type, string value)> signInNames = jUser["signInNames"].Select(jToken => (jToken["type"].Value<string>(), jToken["value"].Value<string>())).ToList(); 
    SignInNames = signInNames.AsReadOnly(); 

    UserPrincipalName = jUser["userPrincipalName"].Value<string>(); 
    UserType = jUser["userType"].Value<string>(); 
} 

et voici la propriété Email du ADUser:

public string Email 
{ 
    get 
    { 
     if (SignInNames.Count > 0 && SignInNames[0].type == "emailAddress") 
      return SignInNames[0].value; 
     if (OtherMails.Count > 0) 
      return OtherMails[0]; 
     throw new InvalidOperationException("Don't know where to get user Email"); 
    } 
} 
0

Vous devez faire une demande PATCH aux utilisateurs EndPoint

{baseurl}/{tenantId}/users?api-version={apiVersion} 

Ne pas oublier que vous accédez à jeton dans l'en-tête auth:

Authorization: Bearer {accessToken} 

Voici un exemple de modèle (Java) avec des méthodes pour calculer et définir le courrier électronique de connexion sur un objet utilisateur:

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 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 PasswordProfile getPasswordProfile(){ 

     return passwordProfile; 
    } 

    public void setPasswordProfile(final PasswordProfile passwordProfile){ 

     this.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; 
      } 
     } 
    } 
} 

SignInName:

public class SignInName {//userName or emailAddress 

    private String 
     type, 
     value; 

    public String getType(){ 

     return type; 
    } 

    public void setType(final String type){ 

     this.type = type; 
    } 

    public String getValue(){ 

     return value; 
    } 

    public void setValue(final String value){ 

     this.value = value; 
    } 
} 

PasswordProfile:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class PasswordProfile { 

    private String password; 

    private Boolean forceChangePasswordNextLogin; 

    public String getPassword(){ 

     return password; 
    } 

    public void setPassword(final String password){ 

     this.password = password; 
    } 

    public Boolean getForceChangePasswordNextLogin(){ 

     return forceChangePasswordNextLogin; 
    } 

    public void setForceChangePasswordNextLogin(final Boolean forceChangePasswordNextLogin){ 

     this.forceChangePasswordNextLogin = forceChangePasswordNextLogin; 
    } 
}