Добрый день,
Подскажите как можно реализовать автологин в 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
Олег, добрый день!
Ниже пример кода для аутентификации.
[csharp]
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;
}
}
[/csharp]
Спасибо за помощь, разобрался с 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.