Я хочу создать веб-приложение, которое вызывает хранимый процесс SAS и печатает результаты. Я хочу, чтобы аутентификация выполнялась за кулисами.
Веб-приложение построено на PHP, и я буду использовать CURL для выполнения запроса.
Это возможно? Какие варианты CURL необходимы?
Надлежащим способом сделать это (с точки зрения безопасности) было бы использовать API их билетов — вы можете сначала выполнять запросы CURL с PHP с рукопожатием, чтобы в конечном итоге получить результаты конечной точки STP.
Step1a) POST-запрос … / SASLogon / v1 / tickets с закодированной в форме полезной нагрузкой имени пользователя и пароля.
Step1b) Посмотрите на заголовок ответа «Местоположение» (разделенный на «/» [- 1]), чтобы получить свой токен авторизации.
Шаг 2а) Сделайте POST-запрос к тому же первому URL-адресу с добавленным в конце токеном авторизации и передайте в теле (в кодированной форме) URL-адрес службы (service = xxx) (в идеале это … / SASStoredProcess / do) конечная точка.
Step2b) разобрать тело ответа для вашего жетона билета.
Шаг 3а) Запустите запрос к службе (… / do? Token = [TicketToken]) с полезной нагрузкой POST (закодированная форма) _program = STP конечная точка
Шаг 3б) Результаты будут результатом вашего запроса.
Это, вероятно, требует определенных настроек установки SAS, но это обычное рукопожатие (обычно — из памяти, а не с примером передо мной). SAS очень специфичен в зависимости от версии и используемой установки.
Вы можете достичь этого с помощью CURL, но, по моему личному мнению, мне нравится использовать библиотеки запросов более высокого уровня.
Другие ответы даны как действительные, так и закулисные. Я предполагаю, что вы хотите должный уровень безопасности — передача имени пользователя и пароля в каждом запросе является угрозой безопасности. Использование системы тикетов и рукопожатия было бы «лучшим» решением для формы.
Сначала убедитесь, что ваш сохраненный веб-сервер процессов правильно настроен, следуя инструкциям, расположенным Вот.
Создайте файл .php, содержащий приведенный ниже код.
<?php
$parameters = array('_program' => '/Products/SAS Intelligence Platform/Samples/Sample: Hello World', // PATH TO STORED PROCESS
'_username' => 'mysasusername',
'_password' => '{SAS002}EFC0A34D034F489E2E0E03E840D324D6D30964A3', // ENCODED PASSWORD FROM PROC PWENCODE
'myParam1' => 'abc',
'myParam2' => 123
);
//
// CREATE A NEW CURL INSTANCE AND CONFIGURE IT
//
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://sas.myserver.com/SASStoredProcess/do?");
curl_setopt($ch, CURLOPT_PORT, 7980); // PORT USED TO MAKE STORED PROCESS REQUESTS
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // DISABLE SSL CERTIFICATE CHECKING - OPTIONAL DEPENDING ON SERVER CERTIFICATE
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); // DISABLE SSL CERTIFICATE CHECKING - OPTIONAL DEPENDING ON SERVER CERTIFICATE
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // STORED PROCESS LOGIN INVOLVES MULTIPLE PAGE REQUESTS
curl_setopt($ch, CURLOPT_COOKIEFILE, ""); // STORED PROCESS LOGIN REQUIRES COOKIES
curl_setopt($ch, CURLOPT_COOKIEJAR, ""); // STORED PROCESS LOGIN REQUIRES COOKIES
curl_setopt($ch, CURLOPT_HEADER, true); // DONT SUPPRESS HTTP HEADER INFO
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // SUPPRESS DIRECTLY PRINTING RESULTS WHEN CURL_EXEC IS RUN.
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,90); // TIMEOUT LIMIT WHILE TRYING TO CONNECT
curl_setopt($ch, CURLOPT_TIMEOUT, 90); // TIMEOUT WHILE WAITING FOR RESPONSE
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters)); // SET THIS OPTION LAST. MUST USE HTTP_BUILD_QUERY CALL ELSE YOU WILL BE PRESENTED WITH LOGIN PAGE
//
// EXECUTE IS AND SAVE THE RESULTS THEN CLOSE THE CURL OBJECT
//
$response = curl_exec($ch) ;
//
// PARSE OUT THE HTTP HEADER VS THE BODY
//
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);
$body = substr($response, $header_size);
print $body;
curl_close($ch);
?>
Настройте следующее:
После того, как вы настроили его, введите URL-адрес .php-файла в адресную строку вашего браузера. Вы должны увидеть результат:
Hello World!
Перечисленный код PHP использовал минимальное количество параметров, необходимых для работы. Предполагается, что в какой-то момент вы также можете проанализировать данные заголовка, чтобы определить тип содержимого результата.
Кроме того, при реализации приведенного выше кода, убедитесь, что любые учетные данные пользователя хранятся надежно. Никогда не стоит жестко кодировать учетные данные пользователя в исходный код (даже если пароль SAS был запущен через PWENCODE).
Для общего (не php, командной строки) ответа приведем однострочник.
curl -v -L -c cookiefile -b cookiefile \
-d "_program=$STP&_username=$USERNAME&_password=$PASSWORD" \
https://yourdomain.com/SASStoredProcess/do
Как обсуждалось Вот, вещи на заметку включают в себя:
1) Cookiefile используется для того, чтобы маркер сеанса мог быть записан (-c) и впоследствии прочитан (-b) перенаправлением SASLogon.
2) Параметры _username и _password используются для аутентификации (см. Документы)
3) -v для подробного ведения журнала, -L, чтобы указать curl следовать местоположению перенаправления (SASLogon)