Aspnet Core 2.2 Внешняя аутентификация - PullRequest
0 голосов
/ 23 февраля 2019

Создан API аутентификации для обработки аутентификации для нескольких приложений.Это базовая аутентификация.имя пользователя и pw.Нет OAuth с Google и т. Д. API вызывается с учетными данными и отвечает AthenticationResult.Он работает правильно, за исключением AuthenticationResult.Success.Как я узнал, я не могу сериализовать ClaimsPrincipal.По мере того как я читаю, кажется, что ответ - преобразовать в токен.Это правильно?AuthenticationResult.Failed сериализует без проблемы.Какое лучшее решение здесь.Я продолжу искать.
спасибо за чтение

1 Ответ

0 голосов
/ 23 февраля 2019

Общие шаги

Правильно, вам необходимо выполнить следующие шаги:

  1. Вернуть токен из вашего API аутентификации.
  2. Сконфигурируйте ваше приложение для аутентификации JWT Bearer.
  3. Включайте этот токен как часть заголовка authorize при каждом запросе к серверу.
  4. Требуйте аутентификацию / авторизацию в вашемконтроллеры.

Существует отличное ASP.NET Core 2.2 JWT учебное пособие по аутентификации , которое вы должны проверить.

Слишком много кода задействовано, чтобы опубликовать все это целиком, но вот несколько ключевых фрагментов (некоторый код немного изменен для большей ясности вне контекста учебника):

Некоторые ключиФрагменты кода

Создание токена

var tokenHandler = new JwtSecurityTokenHandler();
var key = Encoding.ASCII.GetBytes(_appSettings.Secret);
var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(new Claim[] 
    {
        // 'user' is the model for the authenticated user
        // also note that you can include many claims here
        // but keep in mind that if the token causes the
        // request headers to be too large, some servers
        // such as IIS may reject the request.
        new Claim(ClaimTypes.Name, user.Id.ToString())
    }),
    Expires = DateTime.UtcNow.AddDays(7),
    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
};
var token = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(token);

Настройка аутентификации JWT (в методе Startup.cs ConfigureServices)

var appSettings = appSettingsSection.Get<AppSettings>();
var key = Encoding.ASCII.GetBytes(appSettings.Secret);
services.AddAuthentication(x =>
{
    x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(x =>
{
    x.RequireHttpsMetadata = false;
    x.SaveToken = true;
    x.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuerSigningKey = true,
        IssuerSigningKey = new SymmetricSecurityKey(key),
        ValidateIssuer = false,
        ValidateAudience = false
    };
});

Не забудьте настроить приложение на использовать аутентификацию в Startup.cs Configure метод:

app.UseAuthentication();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...