Как получить access_token, используя localhost в качестве URI перенаправления с неявным предоставлением OAuth в С#?

При неявном типе гранта токен доступа отправляется как фрагмент, а не как параметр. Например: http://localhost/#state=123456789&token_type=Bearer&access_token=xxxxxxxxxxxxxxxxxxxxxxxxx&scope=write+read&expires_in=2592000.

Как я могу получить к нему доступ из С#?

    HttpListener listener = new HttpListener();
    listener.Prefixes.Add("http://localhost/");
    listener.Start();
    System.Diagnostics.Process.Start("https://sketchfab.com/oauth2/authorize/?state=123456789&response_type=token&client_id=yyyyyyyyyyyyyyyyyyyyyyyyyyy");
    HttpListenerContext context = listener.GetContext();
    HttpListenerRequest request = context.Request;

    // request.QueryString doesn't contain access_token

    listener.Stop();

Изменить: Насколько я понимаю из Как я могу получить хэш URL-адреса? - Я не могу получить доступ к этой информации с сервера.

Последний ответ здесь Возможно ли использовать OAuth 2.0 без сервера перенаправления? не касается неявного типа предоставления.


person Andrey    schedule 20.12.2019    source источник
comment
Можете ли вы получить результаты с помощью почтальона? Если это так, используйте сниффер, такой как wireshark или fiddler, и перехватите первый запрос в почтальоне и сравните с приложением С#. Затем сделайте С# похожим на почтальона.   -  person jdweng    schedule 20.12.2019
comment
Я никогда не имел дело с почтальоном. Я вижу access_token в строке URL в браузере. Но я не могу получить к нему доступ с С#. Я думаю, что это должно быть более или менее просто.   -  person Andrey    schedule 20.12.2019
comment
Вы можете посмотреть захват результатов браузера вместо почтальона. Оба дадут подсказки, почему вы не можете войти в С#.   -  person jdweng    schedule 20.12.2019
comment
Я создал простую страницу в качестве ответа. В Chrome я вижу токен в свойстве BaseURI. Насколько я понимаю проблема в том, что фрагменты не идут на сервер. Может быть, мне следует добавить код на страницу ответа, чтобы извлечь его?   -  person Andrey    schedule 20.12.2019
comment
Фрагменты могут означать много разных вещей, а также не идти на сервер. Перенаправление означает, что URL-адрес неверен. Также у вас может возникнуть проблема, если учетные данные не совпадают. URL-адрес — это просто файл html (или эквивалентный) на компьютере, и у вас может не быть учетных данных для доступа к файлу.   -  person jdweng    schedule 20.12.2019
comment
Я немного отредактировал вопрос, чтобы сделать его более понятным. Перенаправление не означает, что URL-адрес неверен — это нормальная часть OAuth. Фрагмент — это часть URL-адреса, следующая за символом #.   -  person Andrey    schedule 20.12.2019
comment
Зачем вам нужен хеш для URL? Если вы видите код авторизации в ответе, вам просто нужно удалить код авторизации из ответа.   -  person jdweng    schedule 21.12.2019
comment
Насколько я понимаю - я вижу ответ в переменной запроса. Но токена нет (токен не является кодом авторизации - это другой тип гранта). OAuth куда-то отправляет токен, и я просто вижу свою простую страницу в веб-браузере с URL-адресом   -  person Andrey    schedule 21.12.2019
comment
Я подозреваю, что что-то не так с файлом cookie. Вы видите куки в запросе? Вы используете HTTPS (безопасный), поэтому должен быть обмен SSL/TLS (сообщениями TCP). Таким образом, либо файл cookie неверен, и сервер отклоняет соединение (предыдущий обмен SSL/TLS не удалось использовать файл cookie); или произошел сбой обмена SSL/TLS. У вас есть сертификат? Возможны проблемы с сертификатом.   -  person jdweng    schedule 21.12.2019