Я использую базу данных postgres через библиотеку Marten с приложением .NET. У меня есть пользовательский IUserLoginStore
, который управляет получением пользователя и его ролей. Кажется, это работает правильно, но у меня проблема с настройкой авторизации.
Я использую аутентификацию через Google, и она работает нормально:
var info = await _signInManager.GetExternalLoginInfoAsync();
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);
Это действие вызывает проблему отказа в доступе:
[HttpPost()]
[Authorize(Roles = "Admin")]
public JsonResult SubmitArticle([FromBody] ArticleInputModel input) {...}
Я покопался в коде авторизации, и проблема, похоже, связана с ClaimsPrincipal
кодом по умолчанию:
public virtual bool IsInRole(string role)
{
return false;
}
Должен ли я реализовать свою собственную версию ClaimsPrinciple
и переопределить IsInRole
, и если я это сделаю, как мне вернуть это в приложение?
private static void ConfigureSecurity(IServiceCollection services)
{
services.AddIdentity<User, Role>()
.AddUserValidator<UserValidator>()
.AddUserStore<MartenUserStore>()
.AddRoleStore<MartenRoleStore>()
.AddDefaultTokenProviders();
}