Внешняя проверка подлинности RetailServer C1 и использование менеджера в Dynamics365 - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь создать внешнее приложение, использующее некоторые функции 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).

Я был бы очень признателен за любую помощь, поскольку я отказывался верить, что это невозможно.

...