【问题标题】:Azure AD B2C with Graph API - how to get/set user's email?带有 Graph API 的 Azure AD B2C - 如何获取/设置用户的电子邮件?
【发布时间】:2017-10-10 16:03:54
【问题描述】:

我使用 Graph API 将用户添加到 Azure AD B2C,但我不知道如何存储用户的电子邮件(主要电子邮件)。 here 哪个字段是用户的主电子邮件地址?

正如我在此处阅读的那样,无法在 身份验证联系信息 中填充值。这对吗?

【问题讨论】:

  • 阅读此处缺少链接。仅供参考。
  • 我看到了链接...让我再添加一个
  • 你现在看到链接了吗?
  • 不,我没有。 “正如我在这里读到的那样,没有办法”没有链接。您可以使用预览功能,该功能会在您发布问题后向您展示它的外观。

标签: azure-active-directory azure-ad-b2c azure-ad-graph-api


【解决方案1】:

我是这样做的:

public async Task<AdUser> GetUserByObjectId(Guid objectId)
{
    string userJson = await SendGraphGetRequest("/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>();
}

这是 AdUser 的 Email 属性:

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");
    }
}

【讨论】:

    【解决方案2】:

    您需要向用户端点发出 PATCH 请求

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

    不要忘记您在 auth 标头中访问令牌:

    Authorization: Bearer {accessToken}
    

    这是一个示例模型 (Java),其中包含用于计算和设置用户对象上的登录电子邮件的方法:

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

    登录名:

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

    密码配置文件:

    @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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      • 2021-03-22
      • 2011-04-06
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多