繁体   English   中英

Azure AD:属性“ mail”是只读的,无法设置

[英]Azure AD: Property 'mail' is read-only and cannot be set

我试图在Azure AD中创建一个用户,但没有成功归档mail 创建用户时,我需要在Azure AD中添加电子邮件ID。

我在json中添加了mail属性,它说

属性“邮件”是只读的,无法设置。

我的C#代码是:

var url = string.Format("https://graph.windows.net/{0}/users?api-version=1.6",oauthsettings.TenantId);
var authDetails = _orchardServices.WorkContext.CurrentSite.As<AzureAuthenticationPart>();

var alogin = new AzureLogin();
var jwttoken = alogin.ServiceAuth(authDetails.ClientId, authDetails.ClientSecret);
var aadUser =new {
  mail=email,
  accountEnabled = true,
  displayName = userName,
  mailNickname = userName,
  passwordProfile = new passwordProfile()
  {
    password = password,
    forceChangePasswordNextLogin = authDetails.IsUpdatePwdNextLogin
  },
  userPrincipalName = userName + oauthsettings.DirectoryName,
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + jwttoken);
var modelval = Convert.ToString(JsonConvert.SerializeObject(aadUser));
var content = new StringContent(modelval, Encoding.UTF8, "application/json");
var result = client.PostAsync(url, content).Result;

登录后从Azure AD获取访问令牌

JwtSecurityToken token = GetAccessToken(authDetails, code, returnUrl);
var claims = token.Claims;
return LogOn(claims, returnUrl);

从JWT获取电子邮件

public LogOnResponse LogOn(IEnumerable<System.Security.Claims.Claim> claims, string returnUrl)
{
  var email = claims.FirstOrDefault(s => s.Type == "email").Value;

在这个地方,我无法获得访问令牌,因为用户创建的时间未在Graph API Request中设置电子邮件。 我还有一个问题是,该电子邮件ID仅基于我也验证了另一个站点,因此我需要在用户创建的时间内设置电子邮件。

我需要电子邮件ID才能登录我的应用程序。 我将Azure AD集成到了电子邮件所需的现有应用程序中。

有谁知道如何在用户的Azure AD中设置电子邮件ID。

我在邮递员中的要求。 对请求中添加的电子邮件的响应

由于mail属性绑定到Exchange Online,因此除非您拥有Exchange Online许可证,否则我们不允许您写入该属性。 当您为用户激活许可证时,Exchange Online将在创建用户邮箱的过程中使用正确的邮箱邮件地址更新该字段。 您可以在创建用户期间使用“ MailNickName”和“其他电子邮件”。 此字段还将取决于它是“本地帐户(B2C)”还是“工作或学校帐户”。

我希望这能回答您有关“邮件”属性为“只读”的问题

AAD用户上的电子邮件地址有两个不同的字段。

Graph API参考

邮件

 POST, GET ($filter) 

用户的SMTP地址,例如“ jeff@contoso.onmicrosoft.com”。

otherMails

 POST, GET ($filter), PATCH 

用户的其他电子邮件地址列表; 例如:[“ bob@contoso.com”,“ Robert@fabrikam.com”]。

请注意,您只能在最初创建用户(POST)时设置mail属性,但是可以在需要时随时更新otherMails属性(PATCH)。

看来您应该根据需要使用otherMails属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM