Я создал собственный атрибут, который хотел бы украсить свой контроллер API внутри моего углового приложения ASPNETCORE. Я могу настроить свою аутентификацию в соответствии с требованиями и войти в приложение из логина. Затем я украшаю свой метод API своим собственным атрибутом.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false)]
public class ManageAuditAttribute : AuthorizeAttribute, IAuthorizationFilter
{
public List<Claim> Claims { get; set; }
public ManageAuditAttribute(String feature)
{
Feature = feature;
}
public bool IsAuthorized()
{
// TODO check there is a claim for the given feature
}
private String Feature { get; }
public void OnAuthorization(AuthorizationFilterContext context)
{
var accessor = (IHttpContextAccessor)context.HttpContext.RequestServices.GetService(typeof(IHttpContextAccessor));
var name = context.HttpContext.User.FindFirst(ClaimTypes.Email); //NULL
var user = context.HttpContext.User; // NULL
var userName = Thread.CurrentPrincipal.Identity.Name; // NULL
}
}
Прежде чем сказать, что заявки не используются таким образом, я бы добавил, что мне нужно встроить это в унаследованную систему, которая имеет список разрешенных функций. Я добавляю эти функции пользователю как претензии и проверяю, что претензии существуют для каждого пользователя. Значение для фактической заявки - это имя приложения, для которого требуется заявка.
Я мог бы легко добавить их в качестве настраиваемого списка для моего пользовательского удостоверения личности, что может быть более подходящим, однако, мне все еще нужно получить доступ к моему пользователю.
Я могу получить пользователя, но имя всегда пусто, и мой список заявок также пуст. Это как если бы я не вошел в систему вообще. Даже после входа в систему.