我们正在使用Azure AD B2C,我正在尝试为登录用户实现changePassword功能。我们已经按照本教程https://docs.microsoft.com/en-us/azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet进行了操作,并且我们已经成功实现了它。 但我们希望登录用户可以更改现有密码(直接在应用程序中)。我们发现了这种方法(https://msdn.microsoft.com/fr-fr/library/azure/ad/graph/api/functions-and-actions#changePassword),但我们没能使它工作......
在AD B2C中使用AD Graph API与登录用户的标准工作流程是什么? 我有一个与B2C租户相关的应用程序。我创建了Android和iOS应用程序,并且由于注册或登录策略,我能够连接和获取令牌,这一点还可以...... 与此同时,我创建了一个服务应用程序,以便使用AD Graph API(感谢上面的第一个链接)。 我们已经成功测试了一些操作,例如获取用户列表,找到特定用户,更改了一些....但是现在我想为连接用户使用方法“changePassword”(第二个li)并且我使用它失败了。我不知道要提供哪个访问令牌,两个测试(使用来自应用服务凭证的令牌或使用由于登录策略而收到的访问令牌)都失败了? 其他问题,我使用PowerShell创建的应用服务在Azure门户中看不到是正常的吗?
谢谢;)
答案 0 :(得分:1)
其他问题,我使用PowerShell创建的应用服务在Azure门户中不可见是正常的吗?
我们可以通过搜索appPrincipalId找到PowerShell创建的服务主体,如下所示:
要执行Azure AD Graph的更改密码REST API,我们需要提供委托访问令牌。在这种情况下,我们可以使用资源所有者密码凭据流,这需要用户的用户名和密码进行身份验证。要使用此流程,我们可以注册服务主体,如下所示:
$app = New-AzureRmADApplication -DisplayName "appPS2" -HomePage "https://adb2cfei.onmicrosoft.com/appPS2" -IdentifierUris "https://adb2cfei.onmicrosoft.com/appPS2" -Password "123"
New-AzureRmADServicePrincipal -ApplicationId $app.ApplicationId
然后我们需要登录Azure经典门户以授予代理权限Directory.AccessAsUser.All
,如下图所示:
以下是使用资源所有者密码凭据流获取令牌的代码:
Post: https://login.microsoftonline.com/adb2cfei.onmicrosoft.com/oauth2/token
resource=https%3a%2f%2fgraph.windows.net&client_id={ $app.ApplicationId}&grant_type=password&username=fx%40adb2cfei.onmicrosoft.com&password={currentPassword}&client_secret=123
然后我们可以使用此令牌更改登录用户的密码,如下所示:
POST: https://graph.windows.net/adb2cfei.onmicrosoft.com/me/changePassword?api-version=1.6
authorization: bearer {access_token}
content-type: application/json
{
"currentPassword":"{currentPassword}",
"newPassword":"{newPassword}"
}