Azure AD B2C 连接的用户使用 Graph AD API 更改密码
Posted
技术标签:
【中文标题】Azure AD B2C 连接的用户使用 Graph AD API 更改密码【英文标题】:Azure AD B2C Connected user change password with Graph AD API 【发布时间】:2017-01-09 13:47:03 【问题描述】:我们正在使用 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(感谢上面的第一个链接)。 我们已经成功地测试了一些操作,比如获取用户列表、查找特定用户、更改一些......但是现在我想为连接的用户(第二个 li)使用方法“changePassword”,但我使用它失败了.我不知道要提供哪个访问令牌,两个测试(使用来自应用服务凭证的令牌或使用由于登录策略而收到的访问令牌)都失败了?? 另一个问题,我用 PowerShell 创建的应用服务在 Azure 门户中不可见是否正常??
谢谢 ;)
【问题讨论】:
【参考方案1】:其他问题,我用PowerShell创建的应用服务在Azure Portal中不可见是否正常??
我们可以通过搜索 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"
【讨论】:
确定门户中的位置。 但恐怕我不明白你的其余答案。按照教程,我已经完成了你所说的授权更新。而且我可以使用 Graph Api (msdn.microsoft.com/fr-fr/library/azure/ad/graph/api/…) 重置密码。但是现在,如果我想为登录用户实现 changePassword(例如:graph.windows.net/me/changePassword?api-version),我必须在标头中放入什么访问令牌?我已尝试使用 B2C 应用程序中的访问令牌,但它不起作用... 很抱歉给您带来了困惑。我会更新帖子,请告诉我是否有帮助。 抱歉,我不确定我是否理解您所说的。我允许我作为连接的 AD B2C 用户完成更改密码的实际过程: 1. 获取 GRAPH API 的令牌(感谢 appID 和 appSecret)。 2. 使用我在第一步中获得的令牌请求带有用户 objectID 的用户信息。 3.解析json并检索其中的UPN。 4. 为您在第一个答案中描述的应用服务请求令牌:UPN 和当前密码。 5. 使用您描述的 json(旧和新密码)和标头中的令牌(步骤 4)调用图形 changepassword。有没有更短的流程? @user1523812 不。我认为没有任何步骤可以跳过。以上是关于Azure AD B2C 连接的用户使用 Graph AD API 更改密码的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话
Azure AD B2C 与企业 (Azure?) AD 帐户集成
Azure AD 与 Azure AD B2C 与 Azure AD B2B