使用API​​在Azure AD中注册应用程序(应用程序注册)?

时间:2020-08-10 09:26:46

标签: azure api asp.net-core azure-ad-graph-api

我需要使用.net core 2.0中的API在Azure AD(应用程序注册)中注册应用程序。 我试图使用Power-Shell注册应用程序。这是工作。但是我需要使用API​​来执行此操作,因为当我们在Web服务器上部署Power-shell脚本时,会遇到授权问题。

有没有可以用来注册API的API?

我试图找到Microsoft Graph API,但没有找到任何示例。我还尝试查找示例示例,但是他们正在使用Power-shell脚本进行应用程序注册。

1 个答案:

答案 0 :(得分:1)

根据需要,您可以使用Microsoft图api POST https://graph.microsoft.com/v1.0/applications

要使用此api,您需要完成授权。当您担心授权时,建议您使用client_credential授予流来进行授权。您可以参考图形api文档中的以下代码,以通过sdk请求api。

GraphServiceClient graphClient = new GraphServiceClient( authProvider );

var application = new Application
{
    DisplayName = "Display name"
};

await graphClient.Applications
    .Request()
    .AddAsync(application);

顺便说一句,您可以参考此document来了解如何在上面的代码中获取authProvider

enter image description here

================================= 更新 ====== ========================

您需要向创建的应用程序添加权限。我们可以发现graph api需要以下权限:

enter image description here

因此,我们需要为您创建的应用程序添加至少一种权限,请参考以下步骤:

enter image description here

enter image description here

添加权限后,不要忘记授予管理员同意。

enter image description here

然后,运行您的代码。它将成功创建新应用。

======================= 更新添加权限 ============= ======

要创建具有一定权限的应用,可以使用以下代码:

using Microsoft.Graph;
using Microsoft.Graph.Auth;
using Microsoft.Identity.Client;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace ConsoleApp28
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder
            .Create("<client id>")
            .WithTenantId("<tenant id>")
            .WithClientSecret("<client secret>")
            .Build();

            ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);

            GraphServiceClient graphClient = new GraphServiceClient(authProvider);
            
            var application = new Application
            {
                DisplayName = "huryNewappWithPermissions",
                RequiredResourceAccess = new List<RequiredResourceAccess>()
                {
                    new RequiredResourceAccess
                    {
                        ResourceAppId = "00000003-0000-0000-c000-000000000000",
                        ResourceAccess = new List<ResourceAccess>()
                        {
                            new ResourceAccess
                            {
                                Id = Guid.Parse("e1fe6dd8-ba31-4d61-89e7-88639da4683d"), //id of User.Read(Delegated) permission
                                Type = "Scope"
                            },
                            new ResourceAccess
                            {
                                Id = Guid.Parse("1bfefb4e-e0b5-418b-a88f-73c46d2cc8e9"), //id of Application.ReadWrite.All(Application) permission
                                Type = "Role"
                            }
                        }
                    }
                }
            };

            await graphClient.Applications.Request().AddAsync(application);
        }
    }
}

您可以通过此api列出所有图形权限:

https://graph.microsoft.com/v1.0/serviceprincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'

然后找到权限的ID并将其放入上面的代码中。 Type = "Scope"表示许可权是“委派”类型,Type = "Role"表示许可权是“应用程序”类型。