Добрый день,
Подскажите как можно реализовать автологин в bmponline?
Требуется реализовать переход с внешнего ресурса с заданными логином/паролем, например, через post запрос или используя odata, или js.
Нравится
Ну как минимум можете проголосовать за идею:smile: - http://www.community.terrasoft.ru/ideas/10124
Спасибо за Ваше обращение. Мы зарегистрировали его в Службе технической поддержки и назначили специалиста, который сможет Вас компетентно проконсультировать по данному вопросу.
Добрый день, коллеги!
Пока что ntlm-авторизация для 7.х только в планах и неизвестно, когда будет реализовано.
Но можно попробовать сделать следующее. Создать html-страницу, которая будет размещена в том же домене, что и bpm'online. Этой странице передавать ссылку в bpm и логин с паролем. Внутри страницы делать запрос сервису аутентификации (http://<имя_сервера>/<имя_приложения_BPMonline>/ServiceModel/AuthService.svc/Login), получить авторизационные куки, установить их для домена и сделать редирект по ссылке в bpm. Я сам не проверял, но, думаю, может сработать.
Полезные ссылки:
http://www.webdeveloper.com/forum/showthread.php?214485-Javascript-SetC…
http://jonathanhui.com/javascript-browser-cookies-and-url-operation
http://stackoverflow.com/questions/11876678/window-open-url-having-www-…
"Андрей Каспаревич" написал:ntlm-авторизация
Андрей, про NTLM-аутентификацию никто не говорит. Нужно:
- Галочка "Запомнить меня" на странице логина с сохранением данных в cookie
- Использование стандартной разметки, чтобы браузер может сохранять логин/пароль стандартными средствами - https://lh3.googleusercontent.com/-1SP7HfBUzgI/UptBRdUyoFI/AAAAAAAARtk/…
Тогда я думаю из другого приложения можно будет переходить с кукой.
Александр, передам Ваши пожелания в департамент разработки.
Андрей, а можно подробнее про то как сделать запрос http://<имя_сервера>/<имя_приложения_BPMonline>/ServiceModel/AuthService.svc/Login у меня при попытки запроса возвращается 404 Not Found
Олег, добрый день!
Ниже пример кода для аутентификации.
Uri authServiceUri = new Uri("http://<имя_сервера>/<имя_приложения_BPMonline>/ServiceModel/AuthService.svc/Login"); // URI сервиса аутентификации string userName = "userName"; // Логин пользователя string userPassword = "userPassword"; // Пароль пользователя string solutionName = "solutionName"; // Название конфигурации // Формирование строки с аутентификационными данными. string authString = @"{ ""Language"":""Ru-ru"", ""UserName"":""" + userName + @""", ""UserPassword"":""" + userPassword + @""", ""SolutionName"":""" + solutionName + @""", ""TimeZoneOffset"":-120 }"; byte[] authData = UTF8Encoding.UTF8.GetBytes(authString); // Переменная, в которую будут помещены возвращенные сервером cookie в случае успешной аутентификации. var cookieContainer = new System.Net.CookieContainer(); // Формирование запроса к сервису аутентификации. System.Net.HttpWebRequest request = System.Net.HttpWebRequest.Create(authServiceUri) as System.Net.HttpWebRequest; request.Method = "POST"; request.CookieContainer = cookieContainer; request.ContentType = "application/json"; using (var stream = request.GetRequestStream()) { stream.Write(authData, 0, authData.Length); } // Получение ответа от сервера. Если аутентификация прошла успешно, сервер возвратит аутентификационные // cookie, которые сохраняются в объекте. В дальнейшем эти cookie будут добавляться в запросы к веб-сервису // без повторной аутентификации. using (var response = request.GetResponse()) { if (cookieContainer.Count > 0) { // Ваш код, здесь можем использовать объект cookieContainer; } }
Спасибо за помощь, разобрался с ServiceModel/AuthService.svc/Login, решил иначе, отправил cURL запрос с json данными сохранил полученные куки и использовал их для сессии
Доброго времени суток!
В 7.10.2 перестал работать данный способ автологина(в 7.10.0 все ок). Подскажите, пожалуйста, как исправить.
Код .php файла для автологина (адрес сайта заменен на "***"):
<!DOCTYPE html> <html> <head> <title></title> <script src="http://code.jquery.com/jquery-1.8.3.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <div class="wrapper" align="center" style="margin: auto; margin-top: 5em; z-index: 2"> <img src="https://d13yacurqjgara.cloudfront.net/users/82092/screenshots/1073359/spinner.gif" > <?php if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) { $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time()-1000); setcookie($name, '', time()-1000, '/'); } } // The data to send to the API $postData = array( "Language" => "ru-RU", "TimeZoneOffset" => 2147483647, "UserName" => "Supervisor", "UserPassword" => "Supervisor", "WorkspaceName" => "Default" ); $BPMLOADER = 'BPMLOADER='.$_COOKIE['my_cookie']; // Setup cURL $ch = curl_init('http://**********/ServiceModel/AuthService.svc/Login'); curl_setopt_array($ch, array( CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array('Content-Type: application/json'), CURLOPT_POSTFIELDS => json_encode($postData), /*CURLOPT_COOKIE => "BPMLOADER=km2uqdgbjacnn2lahhznfpq2",*/ CURLOPT_COOKIEJAR => $_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt', )); curl_exec($ch); //var_dump(curl_error($ch)); // Check for errors if($response === FALSE){ die(curl_error($ch)); } curl_close($ch); //Read file withc cookies $fp = fopen($_SERVER['DOCUMENT_ROOT'].'/cookiefile.txt', "r+"); if ($fp) { while (!feof($fp)) { $mytext = fgets($fp); preg_match('/(?<=ASPXAUTH).*$/', $mytext, $temp); if(!empty($temp[0])) $result = $temp[0]; } } else echo "Ошибка открытия файла"; fclose($fp); ?> </div> <script type="text/javascript"> function empty(mixed_var) { var undef, key, i, len; var emptyValues = [undef, null, false, 0, '', '0']; for (i = 0, len = emptyValues.length; i < len; i++) { if (mixed_var === emptyValues[i]) { return true; } } if (typeof mixed_var === 'object') { for (key in mixed_var) { return false; } return true; } return false; } var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var eqPos = cookie.indexOf("="); var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; } debugger; var auth = '<?php echo $result?>'; document.cookie = ".ASPXAUTH=<?php echo $result?>;"; if (empty(auth)) document.location.href = 'http://**********/NuiLogin.aspx'; else document.location.href = 'http://**********/0/Nui/ViewModule.aspx#MainMenu'; </script> </body> </html>
Здравствуйте!
Возможно в Вашем коде отсутствуют CSRF куки, появились в одной из версий 7.10.x.
Более подробно сможете узнать на academy.