2

我正在尝试使用 ASP.NET 5 (rc1-final)、Identity 和 MS.AspNet.Authentication.OAuth 中间件将我正在构建的网站连接到 FitBit。我打算将授权授予流程用于 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 端点(即雅虎)他们不喜欢 localhost。因此,我使用 localhost 进行了尝试,并将我的主机文件修改为不同的域。我已确保我传入的重定向 url 是在 FitBit 上为应用程序注册的。

这个错误来自我的网站,并且已经到了交换访问令牌代码的地步。我有提琴手打开我有点迷失从这里去哪里。我在 http 上运行(因为这是本地开发,我还没有 ssl 证书),但我不完全确定这是否重要。

4

2 回答 2

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";
});
于 2016-01-06T00:27:00.647 回答
1

对 FitBit 的 OAuth 请求出现问题,您需要调试该请求并查看为什么您从 FitBit 收到 401。

于 2016-01-05T23:20:11.923 回答