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

时间:2018-10-23 15:42:20

标签: .net azure-active-directory microsoft-graph azure-ad-graph-api

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

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

使用Graph Api Explorer,实际上可以注册V1应用程序  通过对此有效负载执行POST

  

{“ displayName”:“我的应用”}

     

     

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 个答案:

答案 0 :(得分:1)

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

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

  

我也可以通过执行这样的GET来获取特定的应用

     

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

     

请注意,该ID是对象ID,而不是AppId

     

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

从API的角度来看,您在Azure Portal中看到的“企业应用程序”实际上被称为“服务主体”。现在,您正在“应用程序”列表中寻找它(从Azure门户的角度来看,它对应于“应用程序注册”),因此找不到它。

因此,如果您要使用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)的问题

a。创建“注册的应用程序”

您可以使用Create Application endpoint进行此操作。这也是您提到的。

注意:此终结点可用于创建Azure AD V1或V2应用程序。只要您具有足够的权限,这对两个都适用。我自己也对此进行了测试。对于V2,我只是使用属于该目录并具有Global Admin角色的用户登录。

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

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

使用Microsoft Graph Library for .NET进行此操作非常好,但我还没有足够快地为那里的应用程序找到任何东西,可能是因为这仅在Beta端点中可用,并且SDK使用稳定的v​​1.0元数据。 / p>

无论如何,您始终可以使用如下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。创建企业应用程序(或服务主体)

AFAIK即使使用Microsoft Graph API的beta端点也无法实现。我之所以这样说,是因为对于Service principals related Microsoft Graph documentation,我只会看到“列出,获取和更新”,而没有看到“创建”。

如果仍然需要执行此操作,则可以使用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)。

enter image description here

相关问题