Я пытаюсь создать внешнее приложение, использующее некоторые функции RetailServer.С1 авторизация обязательна в моем сценарии.Стоит отметить, что ни один из клиентов или пользователей не будет иметь доступа к этому приложению, оно будет использоваться только в качестве формы автоматизации.
То, что я до сих пор делал, было:
1)Добавление приложения в Azure Active Directory.
2) Добавление провайдера идентификации с clientId и секретом из пункта 1) в D365.
3) Добавление приложения в D365 в форме приложений Azure Active Directory с пользователем, имеющим полный доступ к системе.
4) Создание метода тестирования для извлечения существующей корзины из RetailServer.
Код:
AuthenticationContext authenticationContext = new AuthenticationContext(tenantAuthority, false);
AuthenticationResult authResult = null;
authResult = await authenticationContext.AcquireTokenAsync(retailserverAddress, new ClientCredential(clientID, clientSecret));
ClientCredentialsToken clientCredentialsToken = new ClientCredentialsToken(authResult.AccessToken);
Microsoft.Dynamics.Commerce.RetailProxy.RetailServerContext retailServerContext = Microsoft.Dynamics.Commerce.RetailProxy.RetailServerContext.Create(new Uri(retailserverAddress + "/Commerce"), OUN, clientCredentialsToken);
Microsoft.Dynamics.Commerce.RetailProxy.ManagerFactory managerFactory;
managerFactory = Microsoft.Dynamics.Commerce.RetailProxy.ManagerFactory.Create(retailServerContext);
Microsoft.Dynamics.Commerce.RetailProxy.ICartManager cartManagerTest = managerFactory.GetManager<Microsoft.Dynamics.Commerce.RetailProxy.ICartManager>();
Microsoft.Dynamics.Commerce.RetailProxy.Cart cartFromProxy = await cartManagerTest.Read(cartWithLine.Id);
Важно то, что я не хочу расширять или изменять CRT /Код RS / D365.Есть ли способ добиться этого?
Сейчас все мои звонки кажутся анонимными и поэтому не могут быть выполнены, даже если у пользователя приложения Azure Active Directory есть полный доступ.
Ошибка:
An exception of type: 'Microsoft.Dynamics.Commerce.Runtime.UserAuthorizationException' occurred while executing Microsoft.Dynamics.Commerce.Runtime.Services.Messages.CheckAccessServiceRequest request by Microsoft.Dynamics.Commerce.Runtime.Services.UserAuthenticationService. Error resource id: 'Microsoft_Dynamics_Commerce_Runtime_AuthorizationFailed', Exception: Microsoft.Dynamics.Commerce.Runtime.UserAuthorizationException: Assigned role is not allowed to perform this operation.
at Microsoft.Dynamics.Commerce.Runtime.Services.CommerceAuthorization.CheckAccess(ICommercePrincipal principal, RetailOperation operationId, RequestContext context, String[] allowedRoles, Boolean deviceTokenRequired, Boolean nonDrawerOperationCheckRequired)
at Microsoft.Dynamics.Commerce.Runtime.Services.UserAuthenticationService.CheckAccess(CheckAccessServiceRequest request)
at Microsoft.Dynamics.Commerce.Runtime.Services.UserAuthenticationService.Execute(Request request)
at Microsoft.Dynamics.Commerce.Runtime.CommerceRuntime.Execute[TResponse](Request request, RequestContext context, IRequestHandler handler, Boolean skipRequestTriggers).
Я был бы очень признателен за любую помощь, поскольку я отказывался верить, что это невозможно.