使用Graph API更改Azure AD B2C用户密码

spo*_*ahn 8 oauth-2.0 azure-active-directory azure-ad-graph-api azure-ad-b2c

我正在尝试使用Sample Graph API应用程序来更改用户的密码,但我得到了:

调用Graph API响应时出错:

{
  "odata.error": {
    "code": "Authorization_RequestDenied",
    "message": {
      "lang": "en",
      "value": "Insufficient privileges to complete the operation."
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

图形API请求:

PATCH /mytenant.onmicrosoft.com/users/some-guid?api-version=1.6 HTTP/1.1
client-request-id: ffd564d3-d716-480f-a66c-07b02b0e32ab
date-time-utc: 2017.08.10 03:04 PM
Run Code Online (Sandbox Code Playgroud)

JSON文件

{
    "passwordProfile": {
        "password": "Somepassword1$",
        "forceChangePasswordNextLogin": false
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经测试过更新用户displayName,并且工作正常.

{
    "displayName": "Joe Consumer"
}
Run Code Online (Sandbox Code Playgroud)

AD应用程序权限

按照此处的说明配置了我的应用权限.

AD App权限

Par*_*akh 12

看看这篇文章.好像它有相同的症状.

解决方案1:

如果在调用仅包含读取权限的API时收到此错误,则必须在Azure管理门户中设置权限.

  • 转到Azure管理门户,然后单击"Active Directory".
  • 选择自定义AD目录.
  • 单击Applications并选择您的应用程序.
  • 单击配置并向下滚动到"对其他应用程序的权限"部分.
  • 为Windows Azure Active Directory提供所需的应用程序权限和委派权限.
  • 最后保存更改.

解决方案2:

如果在调用包含deletereset password操作的API时收到此错误,那是因为这些操作需要Admin角色Company Administrator.截至目前,您只能通过Azure AD Powershell模块添加此角色.

  1. 使用Get-MsolServicePrincipal -AppPrincipalId查找服务主体

    Get-MsolServicePrincipal | ft DisplayName, AppPrincipalId -AutoSize
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用Add-MsolRoleMember将其添加到Company Administrator角色

    $clientIdApp = 'your-app-id'
    $webApp = Get-MsolServicePrincipal –AppPrincipalId $clientIdApp
    
    Add-MsolRoleMember -RoleName "Company Administrator" -RoleMemberType ServicePrincipal -RoleMemberObjectId $webApp.ObjectId
    
    Run Code Online (Sandbox Code Playgroud)

要通过PowerShell连接到B2C租户,您需要一个本地管理员帐户. 这篇博文应该有所帮助,请参阅"解决方案"部分.

创建全局管理员

通过powershell连接

get-msolservice主要截图

添加角色截图