C# 401在ASP.NET 5中使用通用OAuth中间件时未经授权

C# 401在ASP.NET 5中使用通用OAuth中间件时未经授权,c#,asp.net,oauth,asp.net-core,fitbit,C#,Asp.net,Oauth,Asp.net Core,Fitbit,我正在尝试使用ASP.NET 5(rc1最终版)、Identity和MS.AspNet.Authentication.OAuth中间件将我正在构建的网站连接到FitBit。我打算使用OAuth 2.0的授权授予流。我在FitBit上设置了应用程序(详情如下),我的Startup.cs看起来像: app.UseIdentity(); app.UseOAuthAuthentication(options => { options.AuthenticationSchem

我正在尝试使用ASP.NET 5(rc1最终版)、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端点(即Yahoo)不喜欢localhost。所以,我尝试了使用localhost,并将我的hostfile修改到另一个域。我已确保我传递的重定向url是在FitBit为应用程序注册的url


这个错误来自我的网站,并且正在通过它将代码交换为访问令牌。我有小提琴手开着,我有点不知道从这里到哪里去。我在http上运行(因为这是本地开发人员,我还没有ssl证书),但我不完全确定这是否重要。

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

默认情况下,OAuth2通用中间件通过在请求表单中流动客户端凭据来发送客户端凭据(使用
application/x-www-form-urlencoded
进行编码)

遗憾的是,Fitbit只支持基本身份验证:由于凭证不在
授权
头中流动,Fitbit将您的令牌请求视为未经身份验证并拒绝它

幸运的是,这是专门的Fitbit社交提供商(内部基于OAuth2通用中间件)将为您处理的事情:


就这样!非常感谢。值得一提的是,RC2将使HTTP错误更易于调试;)
app.UseFitbitAuthentication(options => {
    options.ClientId = "230H9";
    options.ClientSecret = "ae7ff202cg5z42d85a3041fdc43c9c0b2";
});