使用 .NET 代码以编程方式注册 Azure 企业应用程序

Register Azure Enterprise Application programmatically using .NET code

我正在尝试使用 .NET 代码以编程方式注册企业应用程序 (v2)。

我知道他们可以在 here 上注册,但我想以编程方式进行。

使用Graph Api Explorer,基本上可以注册V1 Apps 通过使用这个 payload

执行 POST

{ "displayName": "My App" }

to

https://graph.microsoft.com/beta/applications

这会创建一个新的应用程序

我可以通过对 https://graph.microsoft.com/beta/applications 执行 GET(显然需要身份验证)

来获取这个新创建的应用程序和任何现有应用程序

我也可以通过这样的 GET 获取特定的应用程序

https://graph.microsoft.com/beta/applications/f0bc4548-deaf-c0de-a123-586b578cf357

注意Id是对象Id而不是AppId

如果我使用企业应用程序的对象 ID 尝试上述操作,我找不到。

我可以使用 directoryObjects 找到企业应用程序,但无法使用该查询路径创建它。

关于如何做到这一点有什么想法吗?

顺便说一下,我认为这些 V2 应用程序可以通过 powershell 完成,但同样这不是我所追求的。

谢谢

您的问题有几个不同的部分。我将尝试分别介绍它们中的每一个。我先从简单的开始。

1. GET for Enterprise Applications(为什么您现在找不到)

I can also get an specific app by doing a GET like this

https://graph.microsoft.com/beta/applications/f0bc4548-deaf-c0de-a123-586b578cf357

Note that the Id is the object Id and not the AppId

If I try the above with the object id of an enterprise app I get not found.

您在 Azure 门户中看到的 "Enterprise application" 实际上从 API 的角度来看在幕后被称为 "Service principal"。现在您正在 "applications" 列表中查找它(从 Azure 门户的角度来看,它对应于 "App registrations"),因此无法找到它。

因此,如果您要使用 Microsoft Graph Explorer 寻找任何企业应用程序,请尝试使用此 Microsoft Graph beta 端点 (Service Principal GET)

GET https://graph.microsoft.com/beta/servicePrincipals
or
GET https://graph.microsoft.com/beta/servicePrincipals/{id}

注册申请、服务主体及其关系

我还建议阅读有关 Applications, Service principals and relationship between them on Microsoft Docs 的文档。它比我在这里可以简要解释的要详细得多。非常重要的一点,特别是对于本文档中的多租户应用程序,将应用程序对象视为您的应用程序的全局表示,以便在所有租户中使用,并将服务主体视为在特定租户中使用的本地表示。

2。关于使用 .NET 代码以编程方式创建企业应用程序 (v2) 的最初问题

一个。创建 "Registered application"

您可以使用 Create Application endpoint 执行此操作。这也是你提到的那个。

注意:同一个端点可用于创建 Azure AD V1 或 V2 应用程序。只要您有足够的权限,这对两者都适用。我自己也测试过这个。对于 V2,我刚刚使用属于该目录并具有全局管理员角色的用户登录。

POST https://graph.microsoft.com/beta/applications

如何使用 .NET(例如 C# 代码)执行此操作。

使用 Microsoft Graph Library for .NET 执行此操作会很棒,但我还没有足够快地找到适用于应用程序的任何内容,可能是因为这仅在 Beta 端点中可用并且 SDK 使用稳定的 v1.0 元数据.

无论如何,您始终可以像这样使用 C# 代码直接调用端点:

string json = "{ \"displayName\": \"My Cool App 1\"}";
string graphRequest = $"{graphResourceUri}/beta/applications";
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, graphRequest);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken);
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
HttpResponseMessage response = await client.SendAsync(request);

b.创建企业应用程序(或服务主体)

据我所知,即使使用 Microsoft Graph API 的 beta 端点也是不可能的。我这样说是因为 Service principals related Microsoft Graph documentation 我只看到 List、Get 和 Update,但看不到 Create。

如果您仍然需要这样做,可以使用 Azure AD Graph API。事实上,如果您正在为生产应用程序执行此操作,则应考虑使用 Azure AD Graph API,因为 Microsoft Graph 的 beta 端点不能保证始终稳定,并且可能会在没有任何通知的情况下发生重大更改。

尽管您应该尽可能使用 Microsoft Graph 而不是 Azure AD Graph API,但与应用程序管理相关的场景属于 Microsoft Graph API 尚未跟上的少数情况。

Azure AD Graph API Documentation for Service Principal

查看支持的操作。在那里可以创建 (POST)。