10.02.2016, 01:39 | #1 |
Участник
|
Вызов кода под текущим пользователя из плагина
Подскажите, как можно синхронный плагин не в песочнице заставить выполняться не из под учетки, указаной в CRMAppPool, а из под текущего юзера?
|
|
10.02.2016, 01:50 | #2 |
Чайный пьяница
|
Расширьте, пожалуйста, свой вопрос. Понимаю, что имеется ввиду аутентификация в стороннем вебсервисе? Покажите код.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
10.02.2016, 02:20 | #3 |
Участник
|
Совершенно верно догадались. Речь о веб-сервисе, где существует требование ходить не под определенной учеткой, а именно под тем пользователем, который нажал на кнопку в где-нибудь CRM. Дальше идет js -> action -> plugin, который и вызывает сторонний веб-сервис.
То есть из плагина вызывается сторонний прокси, вызывающий веб-сервис, которому на вход подаются настройки подключения X++: public OuterWebServiceClient CreateOuterWebService() { var address = new EndpointAddress(_webServiceCfg.SdServiceUrl); var binding = _webServiceCfg.SomeBinding; var result = new OuterWebServiceClient(binding, address); result.Open(); return result; } var factory = new CrmServicesFactory(service, someCfgParam); // создание OuterWebServiceClient var proxy = new IntegrationProxy(factory); proxy.CallService(someParam); |
|
10.02.2016, 12:09 | #4 |
Чайный пьяница
|
Так может получиться только если:
1. У вас где то будут храниться домен/логин/пароль пользователя CRM. 2. Вы придумаете механизм имперсонации при вызове стороннего эндпоинта.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
15.02.2016, 14:54 | #5 |
Moderator
|
Технически, то что вы хотите можно реализовать, но вопрос не решается только кодом, может потребоваться настройка серверов. На сайте CRM включена ASP импресонация, поэтому у вас может получиться выполнить запрос в контексте авторизованного пользователя, однако есть много "но". Чтобы сервер мог передавать токен авторизованного по NTLM пользователя, ему должно быть это разрешено в настройках домена. Кроме того, по какой-то причине, это работает не во всех браузерах. Например, может не работать в Chrome. Для себя я могу объяснить это только тем что когда браузер и сервер "торговались" выбирая наиболее защищенный протокол авторизации, с Хромом удается договориться на том "уровне", которого не достаточно для передачи токена между серверами. Если у вас развернута CBA, тогда задача решается проще и проблема выше снимается.
Чаще всего, чтобы уйти от этой проблемы минимальными усилиями, делают отдельное веб-приложение и по кнопке на ленте открывают форму этого приложения. На ней написано "А вы уверены бла бла бла" и кнопка "ОК". Вся логика реализована в веб приложении, которое обслуживает эту форму. Тем самым снимается проблема крос-вызовов.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|