如何在Azure AD用户中重置密码?

时间:2018-09-17 10:54:55

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

我正在使用Azure AD进行应用程序身份验证。在Azure AD中成功创建了用户。用户可以使用密码登录。我的要求是用户如何重置自己的密码。当用户忘记密码时,如何在我的应用程序中重置自己的密码。有没有可用的图形API?

1 个答案:

答案 0 :(得分:1)

Resetting a user's password是更新用户操作的一种特殊情况。为User指定 passwordProfile 属性。该请求包含一个有效的PasswordProfile对象,该对象指定一个满足租户密码复杂性策略的密码。密码策略通常会限制密码的复杂性,长度和重复使用。有关更多信息,请参见PasswordProfile主题。

您可以通过修补用户对象来重置用户密码:

PATCH https://graph.windows.net/myorganization/users/{user_id}?api-version=1.6

{
    "passwordProfile": {
        "password": "{password}",
        "forceChangePasswordNextLogin": false
    },
    "passwordPolicies": "DisablePasswordExpiration"
}

准备工作

1。切换具有管理员权限的目录。在Azure AD中添加新用户。获取用户名和密码。

注意:设置用户名时,@后面是您的整个目录名。首次登录时,需要更改密码。

enter image description here

2。转到您已注册的本机应用程序,向该应用程序添加以登录用户身份访问目录的权限。 enter image description here 注意:需要使用委托范围User.ReadWrite.AllDirectory.AccessAsUser.All来重置用户密码。除了正确的作用域之外,signed-in用户还需要足够的特权来重置另一个用户的密码。

3。现在,您可以参考以下代码:

var graphResourceId = "https://graph.windows.net/";
var tenantId = "xxxxxxxxxxxxxxxxxxxxx";
var clientId = "xxxxxxxxxxxxxxxxxxxxxxx";
var username = "xxxxxxxxxxxxxxxxxxxx";
var password = "xxxxxxxxx";
var servicePointUri = new Uri(graphResourceId);
var serviceRoot = new Uri(servicePointUri, tenantId);
string aadInstance = "https://login.microsoftonline.com/" + tenantId + "/oauth2/token";
AuthenticationContext authenticationContext = new AuthenticationContext(aadInstance, false);

UserPasswordCredential credential = new UserPasswordCredential(username, password);
AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(graphResourceId, clientId, credential).Result;
var accessToken = authenticationResult.AccessToken;
HttpClient http = new HttpClient();
string url = "https://graph.windows.net/" + tenantId + "/users/" + username + "?api-version=1.6";
var method = new HttpMethod("PATCH");
HttpRequestMessage request = new HttpRequestMessage(method, url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authenticationResult.AccessToken);
var body = "{\"passwordProfile\": {\"password\": \"YourNewPassword\",\"forceChangePasswordNextLogin\": false},\"passwordPolicies\":\"DisablePasswordExpiration\"}";
request.Content = new StringContent(body, Encoding.UTF8, "application/json");
HttpResponseMessage response = http.SendAsync(request).Result;

4。输出如下: enter image description here