使用 ASP.NET Core Web API 的 Facebook JWT 身份验证
Facebook JWT authentication using ASP.NET Core Web API
我正在使用 ASP.NET Core 2.0 Web API 创建带有身份验证的应用程序。我想使用 "login/password" 组合和使用 Facebook 登录。我正在使用 JWT 令牌进行授权。从 Startup.cs
我正在调用扩展方法 RegisterAuth
。
public static void RegisterAuth(this IServiceCollection services, AuthSettings authSettings)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = false,
ValidIssuer = authSettings.Issuer,
ValidAudience = authSettings.Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authSettings.SecretKey))
};
})
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = authSettings.Facebook.AppId;
facebookOptions.AppSecret = authSettings.Facebook.AppSecret;
facebookOptions.SignInScheme = "Bearer";
});
}
在我的控制器中,我有两种方法。 Login
对于 "login/password" 它有效的组合和 returns 我的 jwt 令牌。并且 SignIn
对于不起作用的 facebook。
[Route("SignIn/{provider}")]
public IActionResult SignIn(string provider)
{
return Challenge(new AuthenticationProperties(), provider);
}
SignIn
重定向到 facebook 页面,登录后从那里抛出异常。
InvalidOperationException: No IAuthenticationSignInHandler is
configured to handle sign in for the scheme: Bearer
所以请帮我修复 Facebook 身份验证。
谢谢!
只需更改 Facebook SignInScheme 并添加 cookie。
1) 将 "Bearer";
更改为 CookieAuthenticationDefaults.AuthenticationScheme;
并添加 cookie。
2) 在AddAuthentication
之后添加
.AddCookie()
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = authSettings.Facebook.AppId;
facebookOptions.AppSecret = authSettings.Facebook.AppSecret;
facebookOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
我正在使用 ASP.NET Core 2.0 Web API 创建带有身份验证的应用程序。我想使用 "login/password" 组合和使用 Facebook 登录。我正在使用 JWT 令牌进行授权。从 Startup.cs
我正在调用扩展方法 RegisterAuth
。
public static void RegisterAuth(this IServiceCollection services, AuthSettings authSettings)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = false,
ValidIssuer = authSettings.Issuer,
ValidAudience = authSettings.Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(authSettings.SecretKey))
};
})
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = authSettings.Facebook.AppId;
facebookOptions.AppSecret = authSettings.Facebook.AppSecret;
facebookOptions.SignInScheme = "Bearer";
});
}
在我的控制器中,我有两种方法。 Login
对于 "login/password" 它有效的组合和 returns 我的 jwt 令牌。并且 SignIn
对于不起作用的 facebook。
[Route("SignIn/{provider}")]
public IActionResult SignIn(string provider)
{
return Challenge(new AuthenticationProperties(), provider);
}
SignIn
重定向到 facebook 页面,登录后从那里抛出异常。
InvalidOperationException: No IAuthenticationSignInHandler is configured to handle sign in for the scheme: Bearer
所以请帮我修复 Facebook 身份验证。 谢谢!
只需更改 Facebook SignInScheme 并添加 cookie。
1) 将 "Bearer";
更改为 CookieAuthenticationDefaults.AuthenticationScheme;
并添加 cookie。
2) 在AddAuthentication
之后添加
.AddCookie()
.AddFacebook(facebookOptions =>
{
facebookOptions.AppId = authSettings.Facebook.AppId;
facebookOptions.AppSecret = authSettings.Facebook.AppSecret;
facebookOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});