401 Несанкционированный при использовании универсального промежуточного программного обеспечения OAuth с ASP.NET 5

Я пытаюсь подключить сайт, который я создаю, к FitBit, используя ASP.NET 5 (rc1-final), Identity и промежуточное ПО MS.AspNet.Authentication.OAuth. Я собираюсь использовать поток авторизации для OAuth 2.0. Я настроил приложение (подробности ниже) на FitBit, и мой Startup.cs выглядит так:

app.UseIdentity();

app.UseOAuthAuthentication(options =>
    {
        options.AuthenticationScheme = "FitBit-AccessToken";
        options.AuthorizationEndpoint = "https://www.fitbit.com/oauth2/authorize";
        options.TokenEndpoint = "https://api.fitbit.com/oauth2/token";
        options.SaveTokensAsClaims = true;
        options.CallbackPath = new PathString("/signing-fitbit-token/");
        options.ClientId = "[MY ID STRIPPED OUT]";
        options.ClientSecret = "[MY SECRET STRIPPED OUT]";
        options.DisplayName = "FitBit";
        options.Scope.Add("activity");
        options.Scope.Add("heartrate");
        options.Scope.Add("location");
        options.Scope.Add("nutrition");
        options.Scope.Add("profile");
        options.Scope.Add("settings");
        options.Scope.Add("sleep");
        options.Scope.Add("social");
        options.Scope.Add("weight");
        options.AutomaticAuthenticate = true;
    });

Когда я нажимаю кнопку входа в систему, меня перенаправляют на страницу авторизации на FitBit, но когда я нажимаю кнопку "Авторизовать", меня приветствует страница ошибки разработчика ASP.NET:

An unhandeled exception occurred while processing the request.
HttpRequestException: Response status code does not indicate success: 401 (Unauthorized)
     System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()

Я читал здесь, что с некоторыми конечными точками OAuth (а именно с Yahoo) они не любят localhost. Итак, я попробовал это как с localhost, так и с изменением моего хост-файла в другой домен. Я гарантировал, что URL перенаправления, который я передаю, является тем, что зарегистрировано для приложения в FitBit.

Эта ошибка исходит от моего веб-сайта и доходит до того, что происходит обмен кода на токен доступа. У меня открыт фидлер, я немного растерялся, куда идти дальше. Я работаю по http (так как это локальный разработчик, и у меня еще нет ssl-сертификата), но я не был полностью уверен, имеет ли это значение.

2 ответа

По умолчанию универсальное промежуточное ПО OAuth2 отправляет учетные данные клиента, передавая их в форме запроса (кодируется с использованием application/x-www-form-urlencoded).

К сожалению, Fitbit поддерживает только базовую аутентификацию: поскольку учетные данные не передаются в Authorization В заголовке Fitbit обрабатывает ваш запрос токена как не прошедший проверку подлинности и отклоняет его.

К счастью, это то, что специальный социальный провайдер Fitbit (внутренне основанный на универсальном промежуточном программном обеспечении OAuth2) будет обрабатывать для вас: https://www.nuget.org/packages/AspNet.Security.OAuth.Fitbit/1.0.0-alpha3

app.UseFitbitAuthentication(options => {
    options.ClientId = "230H9";
    options.ClientSecret = "ae7ff202cg5z42d85a3041fdc43c9c0b2";
});

Что-то идет не так с запросом OAuth для FitBit, вам нужно отладить этот запрос и посмотреть, почему вы вернули 401 из FitBit.

Другие вопросы по тегам