Привет.
У меня возникла ошибка после обновления 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/)





Если вы пытаетесь получить доступ к Dynamics 365 на C#, я предлагаю использовать Microsoft.PowerPlatform.Dataverse.Client. Вы пытаетесь получить к нему доступ через консольное приложение, функцию Azure, службу приложений?
Если вы используете ресурс Azure, например службу функций/приложений Azure, вы можете включить присвоенное системой удостоверение. Затем вы можете добавить приложение-функцию или службу приложений в свою среду следующим образом:
new app user в левом верхнем углу, а затем add an app на форме, которая появляется справа.
Далее в вашем коде (в этом примере я буду использовать файл 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);
вы также можете использовать клиент службы без управляемого удостоверения. Я добавил обновленное решение. Также убедитесь, что при регистрации нового пользователя приложения S2S ваш администратор должен использовать ClientID (AppID), созданный посредством регистрации приложения в Azure. Вот некоторая информация о строках подключения и клиенте SDK — github.com/microsoft/PowerPlatform-DataverseServiceClient Строки подключения: Learn.microsoft.com/en-us/dynamics365/customerengagement/…
Спасибо за ответ, но все равно получаю ту же ошибку. на данный момент я понизил версию библиотеки 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 = {ClientId};RedirectUri={RedirectUri};"; вар _serviceClient = новый ServiceClient (строка подключения);
Возможно, попробуйте сохранить AppId и RedirecUri следующим образом: AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;LoginPrompt=Auto; поэтому ваша строка подключения должна выглядеть так: AuthType=OAuth; Имя пользователя = ваше имя пользователя; Пароль=Вашпароль; URL = {оргурл}; AppId=51f81489-12ee-4a9e-aaae-a2591f45987d; RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97; LoginPrompt=Авто; это то же самое, что и в документации, и считаются значениями по умолчанию.
Большое спасибо за ответы, сейчас единственный вариант — перейти на предыдущую версию библиотеки. Я закрою дискуссию. Спасибо
Всем спасибо за ответы, я понизил версию библиотеки до 4.56.0, которая изначально работала.
Большое спасибо за ваш ответ, на самом деле я не администратор среды. Я получаю доступ к приложению в качестве клиента с помощью приложения winform/console. Администратор CRM поделился со мной следующими элементами: имя пользователя/пароль, ClientID, TenantID, RedirectURI, APIURI. Это доступные элементы. позвольте мне попробовать ваш подход. Спасибо