1

我们在公司中使用了多个 LDAP,其中包括用于 Office365、Google 和 OpenLDAP 的 Azure AD - 内部的。

我们正在开发某种独立的前端网络界面,用户可以在其中更改他们的一些数据,包括密码,用户所做的任何更改都应该自动更新并在所有 3 个 LDAP 中复制。

我正在使用自定义 Python 脚本来实现这一点,但是遇到 Azure AD 问题,它不允许我更改密码。

我可以查看所有用户及其数据,但无法更改密码。当我进行身份验证请求时,它会以授予我的应用程序的权限回复我:

scope = Directory.Read Directory.ReadWrite.All Directory.Write offline_access recipient.manage User.ReadWrite User.ReadWrite.All user_impersonation UserProfile.Read

但是服务器的响应是:

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}}

因此,当我看到“Directory.ReadWrite.All”还不够时,我也有“UserProfile.Read”,但没有“UserProfile.Write”我没有在应用程序配置中找到任何可以让我获得访问权限的设置

这些是我所有的应用程序权限:

Azure AD 应用程序权限

一点Python代码:

graphusersurl = GRAPH_API_URL % (TENANT_ID, 'users/<User_ObjectID>', API_VER)
graphheaders={'Authorization': "%s %s" % (TOKEN_TYPE_VALUE, access_token),
          'Content-Type': 'application/json',
         }

passworddata = {
    "passwordProfile":
        { "password":'<NEW_USER_PASSWORD>', 
          "forceChangePasswordNextLogin":False
        }
}

你能告诉我我做错了什么吗?我怎样才能获得执行此类操作的授权?

4

1 回答 1

1

根据错误消息,出现此问题的原因是具有任何“管理员”组织角色的用户不是 Office 365 管理角色中“公司管理员”或“用户帐户管理员”的成员。

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"权限不足,无法完成操作。"}}}

要解决此问题,请参阅提供解决方案的 KB:https: //support.microsoft.com/en-us/kb/3004133。我在这里引用了关键信息,供您快速参考:

请将您的应用程序添加到 Office 365 管理角色中的“公司管理员”。为此,请运行以下所有适用于 Windows PowerShell (MSOL) cmdlet 的 Azure AD 模块:

#-----------------------------------------------------------
   # This will prompt you for your tenant's credential
   # You should be able to use your your Azure AD administrative user name
   # (in the admin@tenant.onmicrosoft.com format)
   #-----------------------------------------------------------
   Connect-MsolService

   #-----------------------------------------------------------
   # Replace the Application Name with the name of your 
   # Application Service Principal
   #-----------------------------------------------------------
   $displayName = "Application Name"
   $objectId = (Get-MsolServicePrincipal -SearchString $displayName).ObjectId

   #-----------------------------------------------------------
   # This will add your Application Service Prinicpal to 
   # the Company Administrator role
   #-----------------------------------------------------------
   $roleName = "Company Administator"              
   Add-MsolRoleMember -RoleName $roleName -RoleMemberType ServicePrincipal -RoleMemberObjectId $objectId

此外,如果 Azure AD 用户具有以下任何“管理员”组织角色,则必须将应用程序添加到 Office 365 管理角色中的“用户帐户管理员”:

• 全局管理员

• 计费管理员

• 服务管理员

为此,请运行以下所有 MSOL cmdlet:

#-----------------------------------------------------------
   # This will prompt you for your tenant's credential
   # You should be able to use your your Azure AD administrative user name
   # (in the admin@tenant.onmicrosoft.com format)
   #-----------------------------------------------------------
   Connect-MsolService

   #-----------------------------------------------------------
   # Replace the Application Name with the name of your 
   # Application Service Principal
   #-----------------------------------------------------------
   $displayName = "Application Name"
   $objectId = (Get-MsolServicePrincipal -SearchString $displayName).ObjectId

   #-----------------------------------------------------------
   # This will add your Application Service Principal to 
   # the Company Administrator role
   #-----------------------------------------------------------
   $roleName = "User Account Administator"  
   Add-MsolRoleMember -RoleName $roleName -RoleMemberType ServicePrincipal -RoleMemberObjectId $objectId

运行这两组 cmdlet 后,您的应用程序将能够更改所有“管理员”组织角色的密码。

请注意,将权限添加到 Office 365 管理角色后,最多可能需要 30 分钟才能将权限应用于应用程序服务主体。

如果您有任何其他问题,请随时告诉我们。

于 2015-08-14T03:13:17.660 回答