Как объединить заголовки базовой аутентификации и OAuth 2.0 с ASP.NET Core 2.x - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь аутентифицировать веб-приложение ASP.NET Core с Sonos, используя OAuth 2.0.

Проблема заключается в том, что ему требуется заголовок запроса авторизации при попытке доступа к токену с использованием кода доступа, полученного с помощьюсистема Sonos OAuth 2.

Но ASP.NET Core, по-видимому, разрешает данные авторизации только в пределах URL, а не в заголовках запроса.Когда я пытаюсь это сделать, я получаю сообщение об ошибке, в котором говорится, что в нем отсутствует заголовок авторизации.

Missing request header 'Authorization' for method parameter of type String

Это происходит после аутентификации с помощью Sonos.

У меня вопрос: как использовать базовую авторизацию?Заголовки как данные авторизации вместо данных авторизации в URL запроса?

Я уже пробовал использовать этот проект github: https://github.com/blowdart/idunno.Authentication/tree/master/src/idunno.Authentication.Basic

Но он не работает длячего я пытаюсь достичь.

Я получил фактический токен для работы с Почтальоном, в Почтальоне я могу выбрать Клиентскую аутентификацию.Когда я выбираю «Отправить как базовый заголовок проверки подлинности», все работает совершенно нормально, но когда я выбираю «Отправить учетные данные клиента в теле», это вызывает ошибку, упомянутую выше.

Некоторые снимки экрана рабочего метода в Postman: Screenshot of auth menu in Postman Screenshot of token request modal in Postman

Фрагмент кода, который работает некорректно и вызывает указанную выше ошибку:

            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = "Sonos";
            })
            .AddOAuth("Sonos", options =>
            {
                options.ClientId = "client token generated by sonos application";
                options.ClientSecret = "client secret generated by sonos application";
                options.CallbackPath = new PathString("/signin-sonos");

                options.AuthorizationEndpoint = "https://api.sonos.com/login/v3/oauth";
                options.TokenEndpoint = "https://api.sonos.com/login/v3/oauth/access";
            });

I 'Я ожидаю, что последний токен доступа, полученный авторизацией OAuth, будет где-то сохранен. Я могу получить к нему доступ и повторно использовать его для управления моими динамиками Sonos с помощью Sonos API.

Если вы хотите воспроизвести эту ошибку, вы можете создатьприложение / интеграция на сайте Sonos: https://integration.sonos.com/integrations

...