Rest 如何通过Graph API向Azure中配置的应用程序分配访问权限?

Rest 如何通过Graph API向Azure中配置的应用程序分配访问权限?,rest,powershell,azure-active-directory,microsoft-graph-api,Rest,Powershell,Azure Active Directory,Microsoft Graph Api,我们有几个应用程序依赖Azure AD提供访问权限。必须手动为每个用户分配访问权限是一件冗长的事情,我希望通过Graph API实现这一过程的自动化 我正在使用PowerShell这样做,我可以成功地通过API进行身份验证,并调用以识别用户等。 我正在努力解决的是以编程方式为应用程序分配访问权限 根据文档,这似乎只存在于测试版中。 但是,当我使用图形浏览器时,intellisense不会显示此方法。 如果我尝试调用它,我会得到错误: 不支持的段类型 这对我来说意味着这个方法不存在,并且没有从

我们有几个应用程序依赖Azure AD提供访问权限。必须手动为每个用户分配访问权限是一件冗长的事情,我希望通过Graph API实现这一过程的自动化

我正在使用PowerShell这样做,我可以成功地通过API进行身份验证,并调用以识别用户等。
我正在努力解决的是以编程方式为应用程序分配访问权限

根据文档,这似乎只存在于测试版中。

但是,当我使用图形浏览器时,intellisense不会显示此方法。

如果我尝试调用它,我会得到错误:

不支持的段类型

这对我来说意味着这个方法不存在,并且没有从文档中删除

GitHub for Graph上有一个未解决的问题

有些SO线程收到MSFT的回复,但没有解决方案

看起来它可以做到这一点,但它掩盖了库后面的细节,我不想维护一个C#应用程序

我无法通过Graph API找到任何关于这是否可行的信息。考虑到其中一些帖子已经发布了一年了,如果微软没有在这方面取得进展,我会感到惊讶。我所能看到的只是引用旧图形API的文档,AFAIK已不再使用


是否可以仅使用REST和Graph API为Azure中配置的应用程序分配访问权限?

根据我的理解,我们可以使用Azure Graph REST来实现相同的目标

以下是代码供您参考:

public async void AssignRoleToUser()
{
    var client = GraphHelper.CreateGraphClient();

    ServicePrincipal servicePrincipal = (ServicePrincipal)client.ServicePrincipals.GetByObjectId("d90b4929-a2d5-43bc-8fc0-1e0adb640575").ExecuteAsync().Result;

    Microsoft.Azure.ActiveDirectory.GraphClient.User user =(Microsoft.Azure.ActiveDirectory.GraphClient.User)client.Users.GetByObjectId("b2d2cadd-21f5-4021-beb5-7b23ebd5364c").ExecuteAsync().Result;

    AppRoleAssignment appRoleAssignment = new AppRoleAssignment();

    // just use a known appRole id for this example
    appRoleAssignment.Id = servicePrincipal.AppRoles.FirstOrDefault().Id;

    // the service principal to add the group with the app role
    appRoleAssignment.ResourceId = Guid.Parse(servicePrincipal.ObjectId);

    appRoleAssignment.PrincipalType = "User";

    // the id of the user
    appRoleAssignment.PrincipalId = Guid.Parse("b2d2cadd-21f5-4021-beb5-7b23ebd5364c");

    user.AppRoleAssignments.Add(appRoleAssignment);
    await user.UpdateAsync();

}
此外,如果未指定自定义角色,则必须使用默认id(零GUID)

有关Azure AD Graph实体参考的更多详细信息,您可以参考

更新
嗯,我想变更日志上说这个被删除了。但是,找不到任何关于它将被替换的原因或内容的其他信息。请参阅原始问题:
我发现了一个C#示例,它看起来可能会这样做,但它隐藏了库后面的细节,我不想维护一个C#应用程序。
-如果这些库工作正常,它们必须对API进行有效调用。我想知道这个调用是什么,这样我就可以独立于平台进行同样的操作。使用Fiddler很容易捕获请求,我在帖子中对其进行了更新。这是旧API吗?这不是官方图表页面上引用的地址。我将同时查看此查询是否有效。这是在Microsoft Graph REST之前发布的Azure AD Graph REST。你可以参考。这两篇文章都证实了我的想法,即Graph API功能完成后,旧的Azure API将立即退役。我想我宁愿等到新的API更新之后,也不必稍后重写脚本。我无法让这个查询工作,它显示
401未经授权
。我假设对Graph起作用的令牌与Azure不同。
POST:https://graph.windows.net/{tenantId}/directoryObjects/{userId}/Microsoft.DirectoryServices.User/appRoleAssignments?api-version=1.6

{     
    "odata.type":"Microsoft.DirectoryServices.AppRoleAssignment",
    "id":"{roleId}",
    "principalId":"{userId}",
    "principalType":"User",
    "resourceId":"{servicePrincipalId}"
}