Добрый день,
Подскажите как можно реализовать автологин в bmponline?
Требуется реализовать переход с внешнего ресурса с заданными логином/паролем, например, через post запрос или используя odata, или js.

Нравится

10 комментариев

Ну как минимум можете проголосовать за идею: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-аутентификацию никто не говорит. Нужно:

  1. Галочка "Запомнить меня" на странице логина с сохранением данных в cookie
  2. Использование стандартной разметки, чтобы браузер может сохранять логин/пароль стандартными средствами - 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 файла для автологина (адрес сайта заменен на "***"):

 

&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;&lt;/title&gt;
	&lt;script src="http://code.jquery.com/jquery-1.8.3.js"&gt;&lt;/script&gt;
	&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div class="wrapper" align="center" style="margin: auto; margin-top: 5em; z-index: 2"&gt;
	&lt;img src="https://d13yacurqjgara.cloudfront.net/users/82092/screenshots/1073359/spinner.gif" &gt;
	&lt;?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" =&gt; "ru-RU",
			"TimeZoneOffset" =&gt; 2147483647,
			"UserName" =&gt; "Supervisor",
			"UserPassword" =&gt; "Supervisor",
			"WorkspaceName" =&gt; "Default"
		);
		$BPMLOADER = 'BPMLOADER='.$_COOKIE['my_cookie'];
		// Setup cURL
		$ch = curl_init('http://**********/ServiceModel/AuthService.svc/Login');
		curl_setopt_array($ch, array(
			CURLOPT_SSL_VERIFYHOST =&gt; 0,
			CURLOPT_SSL_VERIFYPEER =&gt; 0,
		    CURLOPT_POST =&gt; TRUE,
		    CURLOPT_RETURNTRANSFER =&gt; TRUE,
		    CURLOPT_HTTPHEADER =&gt; array('Content-Type: application/json'),
		    CURLOPT_POSTFIELDS =&gt; json_encode($postData),
		    /*CURLOPT_COOKIE =&gt; "BPMLOADER=km2uqdgbjacnn2lahhznfpq2",*/
		    CURLOPT_COOKIEJAR =&gt; $_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('/(?&lt;=ASPXAUTH).*$/', $mytext, $temp);
			if(!empty($temp[0])) $result = $temp[0];
			}
		}
		else echo "Ошибка открытия файла";
		fclose($fp);
	?&gt;
	&lt;/div&gt;
	&lt;script type="text/javascript"&gt;
		function empty(mixed_var) {
		  var undef, key, i, len;
		  var emptyValues = [undef, null, false, 0, '', '0'];
		  for (i = 0, len = emptyValues.length; i &lt; 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 &lt; cookies.length; i++) {
			var cookie = cookies[i];
			var eqPos = cookie.indexOf("=");
			var name = eqPos &gt; -1 ? cookie.substr(0, eqPos) : cookie;
			document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
		}
		debugger;
 
		var auth = '&lt;?php echo $result?&gt;';
 
		document.cookie = ".ASPXAUTH=&lt;?php echo $result?&gt;;";
		if (empty(auth)) document.location.href = 'http://**********/NuiLogin.aspx';
		else document.location.href = 'http://**********/0/Nui/ViewModule.aspx#MainMenu';
	&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

 

Здравствуйте!

 

Возможно в Вашем коде отсутствуют CSRF куки, появились в одной из версий 7.10.x.

Более подробно сможете узнать на academy.

Показать все комментарии