如何使用 C# 代码在 Microsoft Entra ID 中创建应用程序注册并添加权限

问题描述 投票:0回答:1

我开发了一个 Web 应用程序,可以在本地计算机上成功执行 PowerShell 脚本。但是,在将应用程序部署到 Azure 应用服务时,我遇到了错误,表明 PowerShell 命令未执行。尽管我付出了努力,但我找不到任何用于以编程方式创建应用程序注册和添加权限的 C# 代码示例。

场景1:在Microsoft Entra ID(AAD)中创建应用程序注册。

场景 2:更新权限、身份验证类型、将所有者添加到上面创建的应用程序注册中。

本质上,我的目标是完成以下任务:

  • 在 Web 应用程序中执行 PowerShell 脚本。
  • 确保将应用程序部署到 Azure 应用服务时这些 PowerShell 命令正常运行。
  • 研究潜在的替代方案,例如利用 C# 代码,以编程方式创建应用程序注册并添加权限。

以下脚本用于创建应用程序注册

$appName = $PartnerName+$PartnerAppSuffix
$redirectUris = @("https://mscloud.onmicrosoft.com/$appName")
$secretName = "secretKey"

$App = New-AzADApplication -DisplayName $appName `
    -ReplyUrls $redirectUris `
    -Homepage "https://mscloud.onmicrosoft.com/$appName" `
    -IdentifierUris "https://mscloud.onmicrosoft.com/$appName" `
    -Web @{
        ImplicitGrantSetting = @{
            EnableAccessTokenIssuance = $true
            EnableIdTokenIssuance = $true
        }
    }

# Create a new service principal for the app
$ServicePrincipal = New-AzADServicePrincipal -ApplicationId $App.AppId

我正在寻找 C# 代码片段,这些代码片段有助于以编程方式创建应用程序注册以及添加权限和所有者。

c# azure-active-directory permissions azure-app-registration microsoft-entra-id
1个回答
0
投票

我同意@Tiny Wang,您可以利用Microsoft Graph API来创建应用程序并分配权限:

using Microsoft.Graph;
using Azure.Identity;
using Microsoft.Graph.Models;

class Program
{
    static async Task Main(string[] args)
    {
        var scopes = new[] { "https://graph.microsoft.com/.default" };
        var clientId = "ClientID";
        var tenantId = "TenantID";
        var clientSecret = "ClientSecret";

        var options = new ClientSecretCredentialOptions
        {
            AuthorityHost = AzureAuthorityHosts.AzurePublicCloud,
        };

        var clientSecretCredential = new ClientSecretCredential(
            tenantId, clientId, clientSecret, options);
        var graphClient = new GraphServiceClient(clientSecretCredential, scopes);

        // Create the application with required permissions
        var requestBody = new Application
        {
            DisplayName = "testrukcapp",
            RequiredResourceAccess = new List<RequiredResourceAccess>
            {
                new RequiredResourceAccess
                {
                    ResourceAppId = "00000003-0000-0000-c000-000000000000",
                    ResourceAccess = new List<ResourceAccess>
                    {
                        new ResourceAccess
                        {
                            Id = Guid.Parse("a154be20-db9c-4678-8ab7-66f6cc099a59"),
                            Type = "Scope",
                        },
                        new ResourceAccess
                        {
                            Id = Guid.Parse("14dad69e-099b-42c9-810b-d002981feec1"),
                            Type = "Scope",
                        },
                    },
                },
            },
        };

        try
        {
            
            var result = await graphClient.Applications.PostAsync(requestBody);
            Console.WriteLine("Application created successfully!");
            Console.WriteLine($"Application ID: {result.Id}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error creating application: {ex.Message}");
        }
    }
}

enter image description here

Microsoft Entra ID 应用程序已成功创建,具有如下权限:

enter image description here

注意:您用于身份验证的应用程序必须被授予

Application.ReadWrite.All
应用程序类型权限。

  • 传递
    user.read
    权限以创建服务主体。

参考:

创建应用程序-Microsoft Graph v1.0 |微软

© www.soinside.com 2019 - 2024. All rights reserved.