Microsoft.Identity.Client получает ошибку в С#

Привет.

У меня возникла ошибка после обновления Microsoft.Identity.Client до последней версии 4.61.1.

Старая версия (4.56.0) отлично работала с той же строкой кода:

  • вар authBuilder = PublicClientApplicationBuilder.Create (clientId) .WithAuthority(AzureCloudInstance.AzurePublic, tenantId)*

     *//.WithRedirectUri("app://gfdhghg-fa19-5t76hg-ghgh-5646767")* this works with the old version (4.56.0) but not on this version 4.61.1 throwing the error "**Only loopback redirect uri is supported, but urn::wg:oauth:2.0:oob**"
    
  • //.WithRedirectUri("http://localhost")* это работает с новой версией 4.61.1, но удаленный сервер не распознает ее, выдавая следующую ошибку

AADTS50011: URI перенаправления «http://localhost:56010», указанный в запросе, не соответствует URI перенаправления, настроенному для приложения «gfdhghg-fa19-5t76hg-ghgh-5646767». Убедитесь, что URI перенаправления, отправленный в запросе, соответствует URI, добавленному в ваше приложение на портале Azure. Перейдите по адресу https://aka.ms/redirectUriMismatchError, чтобы узнать больше о том, как это исправить.

Подскажите, пожалуйста, как решить эту проблему?

Спасибо

Я пытаюсь получить доступ к Dynamic CRM 365 с помощью веб-API (https://myorganization.api.uyty.dynamics.com/api/data/v9.2/)

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
129
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы пытаетесь получить доступ к Dynamics 365 на C#, я предлагаю использовать Microsoft.PowerPlatform.Dataverse.Client. Вы пытаетесь получить к нему доступ через консольное приложение, функцию Azure, службу приложений?

Если вы используете ресурс Azure, например службу функций/приложений Azure, вы можете включить присвоенное системой удостоверение. Затем вы можете добавить приложение-функцию или службу приложений в свою среду следующим образом:

  1. Перейдите в центр администрирования по адресу admin.powerapps.com и выберите среду, в которую вы хотите добавить пользователя, а затем нажмите «Просмотреть все» приложений S2S, как показано на снимке экрана ниже.
  2. Затем нажмите new app user в левом верхнем углу, а затем add an app на форме, которая появляется справа.
  3. Затем введите имя вашего приложения-функции/службы приложений, и оно должно появиться в списке.
  4. Добавьте соответствующее подразделение и роль безопасности и сохраните.

Далее в вашем коде (в этом примере я буду использовать файл startup.cs в моем приложении-функции) вам необходимо зарегистрировать клиент службы в контейнере внедрения зависимостей следующим образом:

[assembly: FunctionsStartup(typeof(my_function_namespace.Startup))]
namespace my_function_namespace
{

  public class Startup : FunctionsStartup
  {
    public override void Configure(IFunctionsHostBuilder builder)
    {         

        //any other services you want to register


        // Register the ServiceClient in the dependency injection container
        builder.Services.AddSingleton<ServiceClient>(serviceProvider =>
        {

            
            var managedIdentity = new DefaultAzureCredential();
            var environment = "https://yourorgurl.crm.dynamics.com";
            var client = new ServiceClient(tokenProviderFunction: async u =>
                (
                    await managedIdentity.GetTokenAsync(
                        new TokenRequestContext(new[] { $"{environment}/.default"
                        }))).Token,
                    instanceUrl: new Uri(environment)
                    );

            if (client.IsReady)
                return client;
            else
                throw client.LastException;


            });             

        builder.Services.AddLogging();
       }
    }
}

Затем вы можете внедрить свой сервис следующим образом и использовать SDK для вызовов API:

public class SomeDataverseService
{
  private readonly ServiceClient _serviceClient;

  public SomeDataverseService(ServiceClient serviceClient)
  {
    _serviceClient = serviceClient;
  }

  public string GetAccountName(string accountId)
  {
    var account = _serviceClient.Retrieve("account", accountId, new ColumnSet("name", "accountId"));
    if (account == null)
    {
        throw new Exception("Account not found");
    }

    var accountName = account.GetAttributeValue<string>("name");
    return accountName;
  }
}

Обновлять: Использование без управляемого удостоверения и просто строки подключения

var connectionstring = @$"AuthType=ClientSecret;url = {orgurl};ClientId = {clientId};ClientSecret = {clientSecret}";
var _serviceClient = new ServiceClient(connectionString);

Большое спасибо за ваш ответ, на самом деле я не администратор среды. Я получаю доступ к приложению в качестве клиента с помощью приложения winform/console. Администратор CRM поделился со мной следующими элементами: имя пользователя/пароль, ClientID, TenantID, RedirectURI, APIURI. Это доступные элементы. позвольте мне попробовать ваш подход. Спасибо

BSSW 04.06.2024 12:44

вы также можете использовать клиент службы без управляемого удостоверения. Я добавил обновленное решение. Также убедитесь, что при регистрации нового пользователя приложения S2S ваш администратор должен использовать ClientID (AppID), созданный посредством регистрации приложения в Azure. Вот некоторая информация о строках подключения и клиенте SDK — github.com/microsoft/PowerPlatform-DataverseServiceClient Строки подключения: Learn.microsoft.com/en-us/dynamics365/customerengagement/…

Wesley Nell 04.06.2024 12:57

Спасибо за ответ, но все равно получаю ту же ошибку. на данный момент я понизил версию библиотеки 4.56.0. простой код, который я пытаюсь выполнить, приведен ниже: using Microsoft.PowerPlatform.Dataverse.Client; строка ClientId = "oooop-pkkllkj-jhjhjh"; var RedirectUri = "app://oooop-pkkllkj-jhjhjh"; string orgurl = "organization.crm.dynamics.com "; string Connectionstring = @$"AuthType=OAuth;Username=;Password=;Url = {orgurl};AppId = {Cl‌​ientId};RedirectUri=‌​{RedirectUri};"; вар _serviceClient = новый ServiceClient (строка подключения);

BSSW 10.06.2024 14:50

Возможно, попробуйте сохранить AppId и RedirecUri следующим образом: AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;Login‌​Prompt=Auto; поэтому ваша строка подключения должна выглядеть так: AuthType=OAuth; Имя пользователя = ваше имя пользователя; Пароль=Вашпароль; URL = {оргурл}; AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97; LoginPrompt=Авто; это то же самое, что и в документации, и считаются значениями по умолчанию.

Wesley Nell 11.06.2024 15:17

Большое спасибо за ответы, сейчас единственный вариант — перейти на предыдущую версию библиотеки. Я закрою дискуссию. Спасибо

BSSW 27.06.2024 13:20
Ответ принят как подходящий

Всем спасибо за ответы, я понизил версию библиотеки до 4.56.0, которая изначально работала.

Другие вопросы по теме