1

我开始想知道,什么能等同于

  • 登录-AzureRmAccount
  • 新 AzureRmADServicePrincipal
  • New-AzureRmADApplication

Azure SDK for .NET中。出于某种原因,我似乎无法找到它们,我想在这篇博文中做一些类似的事情,但是在代码中。

<编辑:2017-06-20 00:42

Tom Sun那里得到一些线索并深入探讨,我找到了一个答案,它部分解决了“旧图书馆”的问题,也是最初选择订阅的问题。它在https://stackoverflow.com/a/41360632/1332416进行了描述,但是该代码也已经有点旧了,并且再深入一点,在https://将其重写为更新的形式stackoverflow.com/a/38036598/1332416。然而,这还没有完全存在,我继续戳得更远(除非有人戳得更远)。我想我不准确地改写了原来的问题。我想重新创建“使用 PowerShell 的通常登录流程”,但这次是在代码中。不过,这些 PS 命令很难确定。:)

关于使用 PowerShell 选择订阅的部分可能是这样的: $subscription = Get-AzureRmSubscription | Out-GridView -Title "Select the subsbcription for the deployment" -PassThru Select-AzureRmSubscription -SubscriptionId $subscription.SubscriptionId

4

1 回答 1

1

.NET 源代码的 Azure 管理库中,我找不到创建 AD ServicePrincipal 和 Azure AD 函数。经过一番调查,我发现我们可以使用Microsoft.Azure.ActiveDirectory.GraphClient SDK 做到这一点。我做了一个测试演示,它在我这边工作正常。以下是我的详细步骤:

准备:

1.我们需要在Azure门户中创建一个原生的AD应用

在此处输入图像描述

  1. 以登录用户委派的权限分配访问目录

在此处输入图像描述

  1. 我们可以在屏幕截图门户上获取我们的租户 ID,即目录信息

在此处输入图像描述

脚步:

1.创建一个C#控制台项目。

2.参考Microsoft.Azure.ActiveDirectory.GraphClient SDK,更多细节请参考packages.config部分

3.在项目中添加如下代码。

 public static async Task<string> GetAccessToken(string userName, string password)
        {
            var tokenResponse = await context.AcquireTokenAsync("https://graph.windows.net", appId, new UserCredential(userName, password));
            var accessToken = tokenResponse.AccessToken;
            return accessToken;
        }

    static string appId = "created AD Application Id";
    static string tenantId = "tenant Id";
    static string graphResourceId = "https://graph.windows.net";
    static string username = "user name";
    static string userPasswrod = "passowrd";
    static void Main(string[] args)
    {

        Uri servicePointUri = new Uri(graphResourceId);
        Uri serviceRoot = new Uri(servicePointUri, tenantId);
        ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetAccessToken(username, userPasswrod));
        Application application = new Application
        {  
            Homepage = "http://localhost:13526/",
            DisplayName = "tomnewapplication",
            IdentifierUris = new List<string> { "http://localhost/abcde" }
        };

     //Create Azure Directory Application   
     activeDirectoryClient.Applications.AddApplicationAsync(application).Wait();
        ServicePrincipal servicePrincipal = new ServicePrincipal
        {
            AppId = "existing AD application Id"
        };
     //Create service principal 
       activeDirectoryClient.ServicePrincipals.AddServicePrincipalAsync(servicePrincipal).Wait();
    }

4. 从 azure 门户检查

在此处输入图像描述

包.config 文件

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.ActiveDirectory.GraphClient" version="2.1.1" targetFramework="net452" />
  <package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Data.Services.Client" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Graph" version="1.2.0" targetFramework="net452" />
  <package id="Microsoft.Graph.Core" version="1.3.0" targetFramework="net452" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.1" targetFramework="net452" />
  <package id="System.Spatial" version="5.6.4" targetFramework="net452" />
</packages>
于 2017-06-19T13:20:47.430 回答