Я пытаюсь создать собственный фильтр аутентификации для ASP.NET Web API. Ниже приведен код моего фильтра аутентификации
public class IDPAuthenticationFilter : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var identity = new ClaimsIdentity();
identity.AddClaim(new Claim(ClaimTypes.Name, "testUser"));
identity.AddClaim(new Claim(ClaimTypes.Role, "client"));
identity.AddClaim(new Claim("testUser"));
identity.AddClaim(new Claim("APP:USERID", "50123"));
var principal = new GenericPrincipal(identity, new string[] { });
Thread.CurrentPrincipal = principal;
HttpContext.Current.User = principal;
base.OnAuthorization(actionContext);
}
}
Я настроил фильтр аутентификации глобально и с помощью точки останова подтвердил, что фильтр вызывается.
config.Filters.Add(new IDPAuthenticationFilter());
Проблема в том, что если я добавлю атрибут [System.Web.Http.Authorize]
к какому-либо контроллеру, я получу 401 Несанкционированную ошибку. Я могу получить доступ к имени пользователя, используя User.Identity.Name
в действии контроллера, но если я добавлю атрибут авторизации, я получу ошибку. Есть ли что-то, чего мне не хватает.
Спасибо за ваше время. Пожалуйста, добавьте комментарий, если требуется какая-либо другая информация.