C# 401在ASP.NET 5中使用通用OAuth中间件时未经授权
我正在尝试使用ASP.NET 5(rc1最终版)、Identity和MS.AspNet.Authentication.OAuth中间件将我正在构建的网站连接到FitBit。我打算使用OAuth 2.0的授权授予流。我在FitBit上设置了应用程序(详情如下),我的Startup.cs看起来像: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
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";
});