Вы можете создать свой собственный тип Принципала, который реализует IPrincipal
, или расширить существующий тип субъекта, например ClaimsPrincipal
.
. Затем в коде CustomAuthorizationAttribute
вы можете установить свойсвойства из расшифрованного токена.Вернувшись в контроллер, вы сможете получить доступ к принципалу и получить те значения, которые вы установили.
Ссылки: IPrincipal , Заявка принципала
Псевдокод, свободно основанный на ClaimsPrincipal, как я уже использовал ранее.
public class CustomPrincipal : ClaimsPrincipal
{
public CustomPrincipal(IEnumerable<ClaimsIdentity> identities, string phone)
: base(identities)
{
this.PhoneNumber = phone;
}
// My properties that I need.
public string PhoneNumber { get; }
}
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
... other code ...
context.Principal = new CustomPrincipal( <stuff to set> );
}
}
Затем в вашем контроллере выполняются действия, которые разрешены:
CustomPrincipal principal = this.RequestContext.Principal as CustomPrincipal;
... use principal.PhoneNumber etc ...