当前位置: 首页 > 知识库问答 >
问题:

使用客户端机密访问Dynamics Business Central

仲涵亮
2023-03-14

我试图用身份验证详细信息建立到业务中心服务的连接,但它给了我一个错误。然而当我在邮递员上测试它时,它工作得很完美。

using System.Net.Http;
using System.Net.Http.Headers;
using Microsoft.Identity.Client;

private void BusinessCentral()
{
    string TenantId = "...";
    string ClientId = "...";
    string ClientSecret = "...";

    string CallbackUrl = @"https://businesscentral.dynamics.com/";
    string GetUrl = string.Format(@"https://api.businesscentral.dynamics.com/v2.0/{0}/Production/api/v2.0/companies", TenantId);

    try
    {
        string[] Scopes = new[] { "https://api.businesscentral.dynamics.com/.default" };
        var App = ConfidentialClientApplicationBuilder
            .Create(ClientId)
            .WithClientSecret(ClientSecret)
            .WithRedirectUri(CallbackUrl)
            .WithTenantId(TenantId)
            .Build();

        var result = App.AcquireTokenForClient(Scopes).ExecuteAsync().Result;

        if (result != null)
        {

            HttpClient HttpCli = new HttpClient();
            var defaultRequestHeaders = HttpCli.DefaultRequestHeaders;
            if (defaultRequestHeaders.Accept == null || !defaultRequestHeaders.Accept.Any(m => m.MediaType == "application/json"))
            {
                HttpCli.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            }
            defaultRequestHeaders.Add("Authorization", result.CreateAuthorizationHeader());

            HttpResponseMessage response = HttpCli.GetAsync(GetUrl).Result;
            if (response.IsSuccessStatusCode)
            {
                string json = response.Content.ReadAsStringAsync().Result;
                var apiResult = JsonConvert.DeserializeObject<List<JObject>>(json);

            }
            else
            {
                string content = response.Content.ReadAsStringAsync().Result;
                // ERROR: "code": "Authentication_InvalidCredentials", "message":"The server has rejected the client credentials.

            }
        }
    }

    catch (Exception ex)
    {
        
    }
}

共有1个答案

盖雪峰
2023-03-14

代码是正确的,问题是关于权限的业务中心配置。

我没有权限访问该配置,因此我不能给出详细信息。

 类似资料:
  • 我需要在JavaScript中访问Azure密钥库中的一些秘密值。它是普通的JavaScript,没有NPM和节点。有没有直接从JavaScript获取值的选项?或者我需要编写一个单独的API来检索密钥库。这与保护某些ID无关,我想知道是否有任何可能的选项从客户端获取密钥库值。 我希望这是在简单的JavaScript。

  • 我正在尝试各种Azure功能,目前希望从KeyVault检索一个秘密。 直截了当地说: 我正在使用这个nuget包与我的azure资源进行交互。 我开发了一个简单的。NET核心控制台应用程序,并在本地运行。 我有一个密钥库资源,其中定义了一个处于活动状态且未过期的秘密。 我在AAD中注册了一个应用程序,因此我的本地出货。NET Core控制台应用程序在AAD中具有标识。 然后我在AAD的注册应用程

  • 我们计划将主动 MQ (STOMP) 用于我们的一个项目。其中一个要求是,如果我们发现用户不合适,就将其踢出/禁止。如何通过单板技术实现这一点?有点像在 IRC 中踢球的东西。

  • 我使用。NET Core2.0和ASP.NET Core2.0进行应用程序开发。“测试”应用程序是一个。NET核心控制台应用程序。我正在编写的核心代码是一个类库。一旦适当的测试。我选择这样做是因为我暂时不会使用它(它正在替换旧的ASPNET代码)。 无论如何,由于我必须处理各种服务的大量API密钥,所以我决定使用Microsoft Azure Key Vault来存储密钥。我有这一切设置,并理解这