Apereo CAS OAuth2: какова цель конечной точки / callbackAuthorize? - PullRequest
0 голосов
/ 23 апреля 2020

Это наблюдение относится к CAS 5.3.9 и документации по https://apereo.github.io/cas/5.3.x/installation/OAuth-OpenId-Authentication.html

Нет упоминания о конечной точке / callbackAuthorize, и все же я вижу это в своей реализации Код авторизации потока. Вот последовательность запросов (мы предполагаем, что пользователь уже аутентифицирован в CAS):

REQ: GET https://localhost: 8145 / api / profile (защищенная конечная точка моего приложения )

RESP: 302, расположение: https://cas-server: 8443 / cas / oauth2.0 / авторизовать? Response_type = code & client_id = client1 & redirect_uri = https% 3A% 2F% 2Flocalhost% 3A8145% 2Fcallback% 3Fstate% 3Dcsrf

REQ: GET (URL выше)

RESP: 302, расположение: https://cas-server: 8443 / cas / login? Service = https% 3A% 2F% 2F172.16.238.10% 3A8443% 2Fooscas% 2Foauth2.0% 2FcallbackAuthorize% 3Fclient_id% 3Dclient1% 26redirect_uri% 3Dhttps% 253A% 252F% 252Flocalhost% 253A8145% 252Fcallback% 253Fstate% 253Dcsrf% 26response_type% 3Dcode% 26client_name% 3DCasOAuthClient

REQ: GET (URL выше)

RESP: 302, расположение: https://cas-server: 8443 / cas / oauth2.0 / callbackAuthorize? Client_id = client1 & redirect_uri = https% 3A% 2F% 2Flocalhost% 3A8145% 2Fcallback% 3Fstate% 3Dcsrf & response_type = код & имя_клиента = CasOAuthClient и билет = eyJhbGciOiJIUzUxMiJ 9.ZXlKNmFYQWlPaUpFUlVZaUxDSmhiR2NpT2lKa2FYSWlMQ0psYm1NaU9pSkJNVEk0UTBKRExVaFRNalUySW4wLi5RdURKNXBJZ21zOU1LcldqSmwxMk5BLnRXb3FrSEFIRzcyY2M3U3k4cm9fR0VCS05feThtVjREazBYNU81NVNVY3g0NEFlby1Kc2R3NGszNUM3X1dDVkwuM01Pd3c5ci1mVS1QelROWDVIZkJSUQ% 3D% 3D.b4rotud6-2s3tOU21-Y0xclwVkVEioTLhiyRhi5VotNfjzt5vKoM2Ix9Hy_OW9KSpuGMqWsBbFOtR9K2B8E6dw & LANG = де

1031 * REQ: GET (URL выше)

RESP: 500, Внутренняя ошибка сервера (КАС журнала показывает сервер SSL Исключение при рукопожатии, возможно, сервер пытается получить доступ к URL-адресу, для которого у него нет сертификата в хранилище доверенных сертификатов)

Мои вопросы:

1) Есть ли документация для конечной точки /oauth2.0/callbackAuthorize ?

2) Почему сервер CAS выдает билет в потоке OAuth2? Не должен ли он вместо этого выдать токен доступа?

3) Откуда берется параметр client_name = CasOAuthClient? Сервер CAS пытается действовать как клиент OAuth2?

1 Ответ

0 голосов
/ 24 апреля 2020

1) Есть ли документация для конечной точки /oauth2.0/callbackAuthorize?

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

2) Почему сервер CAS выдает билет в поток OAuth2? Не должен ли он вместо этого выдать токен доступа?

Нет. Потоки кода авторизации выдают AT через конечную точку маркера доступа. Если вам нужны AT с конечной точки авторизации, вам нужно использовать другой тип предоставления. См. OAUTH spe c для получения дополнительной информации.

3) Откуда берется параметр client_name = CasOAuthClient? Сервер CAS пытается выступать в роли клиента OAuth2?

По ссылке выше ,

... почти все протоколы, поддерживаемые CAS действовать с такими же точными намерениями. Данное развертывание CAS оснащено встроенным «плагином», который знает, как говорить на SAML2 и CAS, OAuth2 и CAS или OpenID Connect и CAS или что-либо еще. Правой частью этого уравнения всегда является CAS, если в качестве примера рассмотреть следующий поток аутентификации с клиентским приложением с поддержкой OAuth2:

  • В развертывании CAS включен плагин OAuth2.
  • Запрос на авторизацию OAuth2 отправляется соответствующей конечной точке CAS.
  • Плагин OAuth2 проверяет запрос и транслирует его в запрос аутентификации CAS!
  • Запрос аутентификации маршрутизируется в соответствующую конечную точку входа в систему CAS.
  • Пользователь аутентифицируется, и CAS направляет поток обратно к плагину OAuth2, выпустив служебный билет для этого плагина.
  • Плагин OAuth2 пытается проверить этот билет в получить необходимый профиль пользователя и атрибуты.
  • Затем плагин OAuth2 приступает к выдаче правильного ответа OAuth2 путем перевода и преобразования профиля и проверенных утверждений в то, что может понадобиться клиентскому приложению.

Также извлечено из is link :

... все протоколы являются клиентами сервера CAS, которые взаимодействуют с ним по протоколу CAS. Это делается на уровне запросов / браузера, в отличие от внутренних действий через сильно настроенные веб-потоки, которые могут быть связаны друг с другом. Модули протокола, которые существуют в CAS, не предполагают внутренних механизмов потока / механизма аутентификации CAS. Они относятся к нему так же, как к внешнему серверу CAS; единственное отличие состоит в том, что они сидят и живут внутри сервера CAS напрямую, и все же они остаются полностью независимыми от этого факта. Проще говоря, в нашем примере модуль SAML2 в основном говорит: «этот входящий запрос должен быть аутентифицирован. Поэтому я направлю его на сервер CAS для аутентификации, и когда он вернется, я сделаю все возможное ».

...