Реплицируйте команду cURL, используя Redirect и Cookies в. Net Core 3.1 - PullRequest
0 голосов
/ 02 апреля 2020

Этот кажется длинным выстрелом. Но я видел несколько ответов, которые указывают, что HttpClient (и аналогичный) следует использовать, когда cURL необходим в. Net Базовом приложении.

У меня есть следующая команда cURL (которая отлично работает):

curl -v -L --negotiate -u : -b ~/cookiejar.txt  "https://idp.domain.net/oauth2/authorize?scope=openid&response_type=code&redirect_uri=https://localhost:5001&client_id=client_id_here"

Эта команда выполняется следующим образом:

  1. Загружает предоставленный URL (https://idp.domain.net/oauth2/authorize....)
  2. Получает 302 ответ на перенаправление на https://idp.domain.net/iwa-kerberos?state=state_guid_here
    • Поскольку существует опция -L, он следует за перенаправлением
  3. Перенаправление отвечает 401 (Несанкционированный) с заголовком www-authenticate:Negotiate.
  4. cURL видит заголовок www-authenticate:Negotiate и получает токен Kerberos из операционной системы (из-за параметров --negotiate и -u).
  5. cURL вызывает URL перенаправления (https://idp.domain.net/iwa-kerberos?state=state_guid_here) с дополнительным заголовком Authorization: Negotiate <kerberos token here>.
  6. . Ответ 302 возвращает перенаправление на https://idp.domain.net/commonauth?state=state_guid_here&iwaauth=1 с добавленный повар ie
    • Из-за опции -b повар ie получает cURL.
  7. cURL вызывает URL-адрес перенаправления (https://idp.domain.net/commonauth?state=state_guid_here&iwaauth=1) с поваром ie, возвращенным в 302 предыдущего шага .
  8. Еще одно перенаправление 302 возвращается. Перенаправление на https://idp.domain.net/oauth2/authorize?sessionDataKey=session_key_guid_here с большим количеством файлов cookie . (Снова выбран из-за опции -b.)
  9. За перенаправлением на https://idp.domain.net/oauth2/authorize?sessionDataKey=session_key_guid_here следует с добавленными файлами cookie .
  10. Еще одно перенаправление 302 возвращается на https://localhost: 5001 /? Code = code_guid_here & session_state = session_state_here (с добавленным поваром ie).
  11. cURL после перенаправления на https://localhost: 5001 /? Code = code_guid_here & session_state = session_state_here с добавленным поваром ie.
  12. Содержимое https://localhost: 5001 /? Code = code_guid_here & session_state = session_state_here возвращается в командная строка cURL.

Сложив все это, кажется серьезным обязательством заставить это работать в. Net приложении. Но я решил спросить, если он где-то встроен в фреймворк.

Есть ли класс. Net Core Framework (или аналогичный), который может позволить мне воспроизвести эту команду cURL в C# код?

...