То, что я хочу сделать, это предложить в моем API различные виды конечных точек, к которым можно получить доступ с помощью аутентификации Windows или JWT Bearer.
В Startup.cs ->Сконфигурируйте , аутентификация настроена так, чтобы позволить аутентификацию на предъявителя с требуемыми параметрами:
// Add JWT Bearer
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(Encoding.ASCII.GetBytes(tokenManagement.Secret)),
ValidIssuer = tokenManagement.Issuer,
ValidateIssuer = true,
ValidateLifetime = true,
ValidateAudience = false,
ClockSkew = TimeSpan.FromSeconds(tokenManagement.ClockSkewSeconds)
};
});
И для защиты моих конечных точек я пробовал что-то вроде этого:
// THIS WAY I CAN LIMIT TO WINDOWS CREDENTIAL
[Authorize]
[HttpGet("[action]")]
public IActionResult AuthorizeWindowsUser()
{
var user = HttpContext.User;
if (user.GetType() == typeof(System.Security.Principal.WindowsPrincipal))
{
return Ok();
}
return Unauthorized();
}
// THIS WAY I CAN LIMIT TO JWT
[Authorize]
[HttpGet("[action]")]
public IActionResult AuthorizeLoginUser()
{
var user = HttpContext.User;
if (user.GetType() == typeof(System.Security.Claims.ClaimsPrincipal))
{
return Ok();
}
return Unauthorized();
}
Это работает, но мои вопросы будут такими:
- Это что-то, что кажется логичным?Моя цель - защитить конечные точки, которые доставляют токен пользователя.Одна конечная точка будет защищена токеном JWT (токен обновления) и определенной ролью, другая будет защищена учетными данными Windows.
- Я что-то упустил?Когда я использовал только проверку подлинности Windows, я использовал для установки services.AddAuthentication (IISDefaults.AuthenticationScheme); в моих Startup.cs -> Configure кажется, чтоЕсли нет необходимости работать в описанной реализации выше, но я действительно не знаю, что делает эта строка, и если это необходимо или нет (кстати, нет).
- Есть ли более умный / красивый способ проверить тип пользователя?Может быть, что-то вроде пользовательских атрибутов
Спасибо за советы!