Я разрабатываю приложение, которое пользователи могут аутентифицировать с помощью имени пользователя и пароля, и мы предоставляем токен JWT, который затем проверяется на сервере.
Одна вещь, которую я хотел бы добавить, - это возможность иметь специальный ключ API (guid), который пользователи могут использовать при интеграции с этим приложением вместо использования имени пользователя и пароля.
Я не уверен, как это сделать, поскольку часть проверки подлинности выглядит как черный ящик (с использованием Aspnet Identity).
Вот мой код для настройки аутентификации.
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<OmbiContext>(options =>
options.UseSqlite("Data Source=Ombi.db"));
services.AddIdentity<OmbiUser, IdentityRole>()
.AddEntityFrameworkStores<OmbiContext>()
.AddDefaultTokenProviders();
services.Configure<IdentityOptions>(options =>
{
options.Password.RequireDigit = false;
options.Password.RequiredLength = 1;
options.Password.RequireLowercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = false;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IMemoryCache cache)
{
var tokenOptions = (IOptions<TokenAuthentication>)app.ApplicationServices.GetService(
typeof(IOptions<TokenAuthentication>));
var ctx = (IOmbiContext)app.ApplicationServices.GetService(typeof(IOmbiContext));
var tokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenOptions.Value.SecretKey)),
RequireExpirationTime = true,
ValidateLifetime = true,
ValidAudience = "Ombi",
ValidIssuer = "Ombi",
ClockSkew = TimeSpan.Zero
};
app.UseJwtBearerAuthentication(new JwtBearerOptions()
{
Audience = "Ombi",
AutomaticAuthenticate = true,
TokenValidationParameters = tokenValidationParameters,
});
//....
}
Приведенный выше код работает при наличии атрибутов [Authorized]
на контроллерах и проверке ролей и тому подобного.
У кого-нибудь есть идеи, как передать какой-либо заголовок Api-Key
на все запросы, содержащие этот специальный ключ API, чтобы он передавал атрибуты [Authorized]
? (ключ хранится в БД).
Спасибо