CAS-прокси с Laravel Homestead: URL обратного вызова не аутентифицирован

Мне нужно настроить приложение Laravel, которое может аутентифицировать прокси в сторонней службе (которую я также контролирую), используя протокол CAS 2.0.

Для этого у меня есть:

  • Сервер CAS, работающий в локальном контейнере Docker, который настроен на пропуск всех служб в HTTP и HTTPS
  • Приложение laravel, работающее в локальной усадьбе vm (я сопоставил 127.0.0.1 с hometead.app)
  • Стороннее приложение (Python-приложение на основе Django), также работающее локально через runserver, к которому мне нужно будет выполнять аутентифицированные запросы (поэтому мне нужно иметь приложение laravel в качестве прокси-сервера, которое затем будет делать запросы к этому приложению).

Приложение laravel использует jasig / phpCAS и xavrsl / cas (недостаточно репутации, чтобы публиковать более 2 ссылок, но репозитории github легко доступны через Google) для взаимодействия с сервером CAS. Это чрезвычайно простое приложение, которое просто отображает сообщение, когда пользователь успешно вошел в систему через CAS. Простота заключается в том, что мне нужно настроить это только для целей тестирования для дальнейших разработок.

До сих пор мне удавалось заставить работать проверку подлинности без прокси, поэтому все части моей настройки взаимодействуют и общаются правильно.

Однако все идет к черту, когда я хочу включить аутентификацию прокси. Я не могу сгенерировать билет PGT, который приложение Laravel использовало бы для выполнения аутентифицированных запросов от имени пользователя. Очевидно, что сервер CAS отказывается распознавать действительность обратного вызова pgtURL (который по умолчанию должен быть https, но самозаверяющих сертификатов кажется недостаточно). Поскольку все это будет использоваться только для целей тестирования, я отключил проверку SSL с сервера CAS согласно эта почта и я пытаюсь заставить URL-адрес обратного вызова http работать.

Вот журнал, когда я пытаюсь подключиться к своему серверу:

A126 .START phpCAS-1.3.3 ****************** [CAS.php:438]
A126 .=> phpCAS::proxy('2.0', '192.168.59.103', 8443, 'cas') [Sso.php:76]
A126 .|    => CAS_Client::__construct('2.0', true, '192.168.59.103', 8443, 'cas', true) [CAS.php:384]
A126 .|    |    Starting a new session ST-1-xVZCKeoYtmvKJzVQBTvQ-cas01exampleorg [Client.php:906]
A126 .|    |    Ticket 'ST-6-9sc0uCM1IJ1PwJiKJ9iT-cas01.example.org' found [Client.php:988]
A126 .|    <= ''
A126 .<= ''
A126 .=> phpCAS::setNoCasServerValidation() [Sso.php:98]
A126 .|    You have configured no validation of the legitimacy of the cas server. This is not recommended for production use. [CAS.php:1553]
A126 .<= ''
A126 .=> CAS_Client::handleLogoutRequests(true, false) [CAS.php:1193]
A126 .|    Not a logout request [Client.php:1689]
A126 .<= ''
A126 .=> phpCAS::allowProxyChain(CAS_ProxyChain) [Sso.php:111]
A126 .<= ''
A126 .=> phpCAS::setExtraCurlOption(81, 0) [AppServiceProvider.php:27]
A126 .<= ''
A126 .=> phpCAS::setFixedCallbackURL('http://homestead.app:8000') [AppServiceProvider.php:28]
A126 .<= ''
A126 .=> phpCAS::setPGTStorageFile('/home/vagrant/Code/storage/PGT.txt') [AppServiceProvider.php:29]
A126 .|    => CAS_PGTStorage_File::__construct(CAS_Client, '/home/vagrant/Code/storage/PGT.txt') [Client.php:2516]
A126 .|    |    => CAS_PGTStorage_AbstractStorage::__construct(CAS_Client) [File.php:119]
A126 .|    |    <= ''
A126 .|    <= ''
A126 .<= ''
A126 .=> phpCAS::forceAuthentication() [Sso.php:126]
A126 .|    => CAS_Client::forceAuthentication() [CAS.php:1015]
A126 .|    |    => CAS_Client::isAuthenticated() [Client.php:1245]
A126 .|    |    |    => CAS_Client::_wasPreviouslyAuthenticated() [Client.php:1356]
A126 .|    |    |    |    neither user nor PGT found [Client.php:1569]
A126 .|    |    |    <= false
A126 .|    |    |    CAS 2.0 ticket `ST-6-9sc0uCM1IJ1PwJiKJ9iT-cas01.example.org' is present [Client.php:1406]
A126 .|    |    |    => CAS_Client::validateCAS20('', NULL, NULL) [Client.php:1409]
A126 .|    |    |    |     [Client.php:3101]
A126 .|    |    |    |    => CAS_Client::getServerProxyValidateURL() [Client.php:3105]
A126 .|    |    |    |    |    => CAS_Client::getURL() [Client.php:507]
A126 .|    |    |    |    |    |    Final URI: http://homestead.app:8000/home [Client.php:3466]
A126 .|    |    |    |    |    <= 'http://homestead.app:8000/home'
A126 .|    |    |    |    <= 'https://192.168.59.103:8443/cas/proxyValidate?service=http%3A%2F%2Fhomestead.app%3A8000%2Fhome'
A126 .|    |    |    |    => CAS_Client::_readURL('https://192.168.59.103:8443/cas/proxyValidate?service=http%3A%2F%2Fhomestead.app%3A8000%2Fhome&ticket=ST-6-9sc0uCM1IJ1PwJiKJ9iT-cas01.example.org&pgtUrl=http%3A%2F%2Fhomestead.app%3A8000', NULL, NULL, NULL) [Client.php:3118]
A126 .|    |    |    |    |    => CAS_Request_CurlRequest::sendRequest() [AbstractRequest.php:242]
A126 .|    |    |    |    |    |    Response Body:
A126 .|    |    |    |    |    |
A126 .|    |    |    |    |    |
A126 .|    |    |    |    |    |
A126 .|    |    |    |    |    |    <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
A126 .|    |    |    |    |    |        <cas:authenticationFailure code='INVALID_PROXY_CALLBACK'>
A126 .|    |    |    |    |    |            The supplied proxy callback url &#039;http://homestead.app:8000&#039; could not be authenticated.
A126 .|    |    |    |    |    |        </cas:authenticationFailure>
A126 .|    |    |    |    |    |    </cas:serviceResponse>
A126 .|    |    |    |    |    |     [CurlRequest.php:84]
A126 .|    |    |    |    |    <= true
A126 .|    |    |    |    <= true
A126 .|    |    |    |    => CAS_AuthenticationException::__construct(CAS_Client, 'Ticket not validated', 'https://192.168.59.103:8443/cas/proxyValidate?service=http%3A%2F%2Fhomestead.app%3A8000%2Fhome&ticket=ST-6-9sc0uCM1IJ1PwJiKJ9iT-cas01.example.org&pgtUrl=http%3A%2F%2Fhomestead.app%3A8000', false, false, '<cas:serviceResponse xmlns:cas=\'http://www.yale.edu/tp/cas\'>   <cas:authenticationFailure code=\'INVALID_PROXY_CALLBACK\'>     The supplied proxy callback url &#039;http://homestead.app:8000&#039; could not be authenticated.   </cas:authenticationFailure></cas:serviceResponse>', 'INVALID_PROXY_CALLBACK', 'The supplied proxy callback url \'http://homestead.app:8000\' could not be authenticated.') [Client.php:3209]
A126 .|    |    |    |    |    => CAS_Client::getURL() [AuthenticationException.php:76]
A126 .|    |    |    |    |    <= 'http://homestead.app:8000/home'
A126 .|    |    |    |    |    CAS URL: https://192.168.59.103:8443/cas/proxyValidate?service=http%3A%2F%2Fhomestead.app%3A8000%2Fhome&ticket=ST-6-9sc0uCM1IJ1PwJiKJ9iT-cas01.example.org&pgtUrl=http%3A%2F%2Fhomestead.app%3A8000 [AuthenticationException.php:79]
A126 .|    |    |    |    |    Authentication failure: Ticket not validated [AuthenticationException.php:80]
A126 .|    |    |    |    |    Reason: [INVALID_PROXY_CALLBACK] CAS error: The supplied proxy callback url 'http://homestead.app:8000' could not be authenticated. [AuthenticationException.php:96]
A126 .|    |    |    |    |    CAS response:
A126 .|    |    |    |    |
A126 .|    |    |    |    |
A126 .|    |    |    |    |    <cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
A126 .|    |    |    |    |     <cas:authenticationFailure code='INVALID_PROXY_CALLBACK'>
A126 .|    |    |    |    |         The supplied proxy callback url &#039;http://homestead.app:8000&#039; could not be authenticated.
A126 .|    |    |    |    |     </cas:authenticationFailure>
A126 .|    |    |    |    |    </cas:serviceResponse> [AuthenticationException.php:101]
A126 .|    |    |    |    |    exit()
A126 .|    |    |    |    |    -
A126 .|    |    |    |    -
A126 .|    |    |    -
A126 .|    |    -
A126 .|    -

У меня было то же сообщение с URL-адресами обратного вызова https, которое, как я знаю, работает (с самозаверяющим сертификатом), потому что я могу получить доступ к своему приложению laravel, используя https. Я не нашел ничего в документации CAS о том, как настроить CAS, чтобы обратный вызов не требовал URL https, и я нашел очень небольшую помощь по этому вопросу в целом (в соответствии с этим прохождение, Я не могу выполнить шаг 2 (b), так как получение PGT — это первое, что хочет сделать мое приложение, а оно не может, потому что обратный вызов не аутентифицирован).

Будучи очень новым для CAS (и Laravel / PHP), я не уверен, что делать дальше, и был бы признателен за помощь.

0

Решение

Ладно, я решил это, добавив свой собственный подписанный сертификат в хранилище доверенных сертификатов контейнера. Поскольку сервер Cas работает на сервере tomcat, мне пришлось использовать псевдоним локального ip своего домашнего хозяйства, установив / etc / hosts тут и там, что также вызвало множество проблем, но их все равно не было так сложно исправить. Я могу остановиться на этом, если нужно, но я думаю, что моя проблема была слишком конкретной, чтобы быть актуальной для многих людей.

1

Другие решения

Других решений пока нет …