Проверка подлинности Facebook JWT с использованием ASP.NET Core Web API - PullRequest
0 голосов
/ 13 апреля 2019

Я использую ASP.NET Core 2.0 Web API для создания приложения с аутентификацией.Я хочу войти, используя комбинацию «логин / пароль» и используя 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";
        });
}

В моем контроллере у меня есть 2 метода.Login для комбинации "логин / пароль", которая работает и возвращает мне токен jwt.И SignIn для facebook, который не работает.

[Route("SignIn/{provider}")]
public IActionResult SignIn(string provider)
{
    return Challenge(new AuthenticationProperties(), provider);
}

SignIn перенаправляет на страницу facebook, откуда после входа в нее выдает исключение.

InvalidOperationException: НетIAuthenticationSignInHandler настроен для обработки входа по схеме: Носитель

Поэтому, пожалуйста, помогите мне исправить Facebook Auth.Спасибо!

1 Ответ

0 голосов
/ 13 апреля 2019

Просто измените Facebook SignInScheme и добавьте куки.

1) Измените "Bearer"; на CookieAuthenticationDefaults.AuthenticationScheme; и добавьте куки.

2) После AddAuthentication добавить

.AddCookie()
.AddFacebook(facebookOptions =>
{
    facebookOptions.AppId = authSettings.Facebook.AppId;
    facebookOptions.AppSecret = authSettings.Facebook.AppSecret;
    facebookOptions.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
});
...