繁体   English   中英

使用 Microsoft Graph + Http 客户端更改 Azure AD B2C 上的用户密码

[英]Change user password on Azure AD B2C using Microsoft Graph + Http Client

我有这个代码...

public class PasswordProfile { 
        public bool forceChangePasswordNextSignIn { get { return false; } }
        public string password { get; set; }
    }
protected async Task setPasswords(string newP)
    {
        PasswordProfile newPassword = new PasswordProfile()
        {
            password = newP
        };
        var content = new StringContent(JsonSerializer.Serialize(newPassword), Encoding.UTF8, "application/json");
        Http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appToken);
        var update = await Http.PatchAsync($"https://graph.microsoft.com/v1.0/users/{userUUID}", content);
    }

我可以使用 Postman 来完成这个场景。 我只是将方法设置为补丁,将 json 作为主体,返回 204 并且密码确实更改了,效果很好。

但是我的代码返回 404。有什么线索吗?

当您调用JsonSerializer.Serialize(newPassword)它返回以下 json

{
    "forceChangePasswordNextSignIn": false,
    "password": "xWwvJ]6NMw+bWH-d"
}

但是图形 API 端点期望像这样的 json

{
  "passwordProfile": {
    "forceChangePasswordNextSignIn": false,
    "password": "xWwvJ]6NMw+bWH-d"
  }
}

您可以使用PasswordProfile属性创建新的 class User并序列化User class 的实例。

public class User
{
    public PasswordProfile passwordProfile { get; set; }
}

protected async Task setPasswords(string newP)
{
    var user = new User
    {
        passwordProfile = new PasswordProfile
        {
            password = newP
        }
    }
    var content = new StringContent(JsonSerializer.Serialize(user), Encoding.UTF8, "application/json");
    Http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appToken);
    var update = await Http.PatchAsync($"https://graph.microsoft.com/v1.0/users/{userUUID}", content);
}

暂无
暂无

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

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