我需要使用.net core 2.0中的API在Azure AD(应用程序注册)中注册应用程序。 我试图使用Power-Shell注册应用程序。这是工作。但是我需要使用API来执行此操作,因为当我们在Web服务器上部署Power-shell脚本时,会遇到授权问题。
有没有可以用来注册API的API?
我试图找到Microsoft Graph API,但没有找到任何示例。我还尝试查找示例示例,但是他们正在使用Power-shell脚本进行应用程序注册。
答案 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
。
================================= 更新 ====== ========================
您需要向创建的应用程序添加权限。我们可以发现graph api需要以下权限:
因此,我们需要为您创建的应用程序添加至少一种权限,请参考以下步骤:
添加权限后,不要忘记授予管理员同意。
然后,运行您的代码。它将成功创建新应用。
======================= 更新添加权限 ============= ======
要创建具有一定权限的应用,可以使用以下代码:
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"
表示许可权是“应用程序”类型。