将 AzureCredentialsFactory.FromServicePrincipal

我使用 .NET 框架 4.7.2 创建了一个控制台应用程序,以使用这些 nuget 包连接到 Azure 资源管理器 API:

  • Microsoft.Azure.Management.ResourceManager.Fluent:v1.18.0 | 下载链接

  • Microsoft.Azure.Management.Fluent:v1.18.0 | 下载链接

这是代码:

namespace AzResourceManager

{

    class Program

    {

        static void Main(string[] args)

        {

            var clientId = "********-****-****-****-************";

            var subscriptionId = "********-****-****-****-************";

            var tenantId = "********-****-****-****-************"; 

            var cert = GetCertificate("********************************");


            var creds = new AzureCredentialsFactory().FromServicePrincipal(clientId, cert, tenantId, AzureEnvironment.AzureGlobalCloud);

            var azure = Azure.Authenticate(creds).WithSubscription(subscriptionId);


            foreach (var rGroup in azure.ResourceGroups.List())

            {

                Console.WriteLine(rGroup.Name);

            }

        }


        private static X509Certificate2 GetCertificate(string thumbPrint)

        {

            var certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);

            certStore.Open(OpenFlags.ReadOnly);

            try

            {

                var certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, thumbPrint, false);

                if (certCollection.Count <= 0)

                    throw new InvalidOperationException("Unable to load certificate from store");

                return certCollection[0];

            }

            finally

            {

                certStore.Close();

            }

        }

    }

}

当执行到达这一行时


foreach (var rGroup in azure.ResourceGroups.List())

应用程序抛出一个System.NullReferenceException: 'Object reference not set to an instance of an object.'


我在 Azure Active Directory 和笔记本电脑中注册的应用程序中安装了证书。我尝试更新一些软件包,但结果是一样的。我唯一无法更新到最新版本的软件包是Microsoft.IdentityModel.Clients.ActiveDirectory(最新版本:v4.4.1),我只能将其更新到版本 v3.19.8


倚天杖
浏览 124回答 2
2回答

12345678_0001

您是否能够使用Resource Groups List REST API获得结果。我已经尝试过自己,并且在使用您的代码时没有收到任何错误,并且对我来说效果很好。请确保已为您注册的应用程序服务主体提供了至少对您的订阅的读者访问权限。请按照文档使用 RBAC 和 Azure 门户管理访问权限为 Azure 资源分配角色。

喵喔喔

尝试使用带有.CER扩展名的导出证书时,我得到同样令人沮丧的 System.NullReferenceException,但是在使用密码以.PFX格式导出证书时:重载的 FromServicePrincipal 函数成功var credentials = SdkContext&nbsp; &nbsp; &nbsp; &nbsp; .AzureCredentialsFactory&nbsp; &nbsp; &nbsp; &nbsp; .FromServicePrincipal(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"********-****-****-****-************", // clientId&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @"c:\cert.pfx", // certificate file path&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"123456", // certificate password&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;"********-****-****-****-************", //tenantId&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AzureEnvironment.AzureGlobalCloud);
打开App,查看更多内容
随时随地看视频慕课网APP