RequestAuthorizeAttribute.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Linq;
  2. using System.Web.Http;
  3. namespace Lottomat.SOA.API.Attribute
  4. {
  5. /// <summary>
  6. /// 自定义此特性用于接口的身份验证
  7. /// </summary>
  8. public class RequestAuthorizeAttribute : AuthorizeAttribute
  9. {
  10. public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
  11. {
  12. //从http请求的头里面获取身份验证信息,验证是否是请求发起方的ticket
  13. var authorization = actionContext.Request.Headers.Authorization;
  14. if (authorization != null && authorization.Parameter != null)
  15. {
  16. //获取授权信息
  17. var encryptTicket = authorization.Parameter;
  18. if (this.ValidateAppKey(encryptTicket))
  19. {
  20. base.IsAuthorized(actionContext);
  21. }
  22. else
  23. {
  24. base.HandleUnauthorizedRequest(actionContext);
  25. }
  26. }
  27. //如果取不到身份验证信息,并且不允许匿名访问,则返回未验证401
  28. else
  29. {
  30. var attributes = actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>();
  31. bool isAnonymous = attributes.Any(a => a is AllowAnonymousAttribute);
  32. if (isAnonymous)
  33. base.OnAuthorization(actionContext);
  34. else
  35. base.HandleUnauthorizedRequest(actionContext);
  36. }
  37. }
  38. /// <summary>
  39. /// 校验授权信息
  40. /// </summary>
  41. /// <param name="encryptTicket"></param>
  42. /// <returns></returns>
  43. private bool ValidateAppKey(string encryptTicket)
  44. {
  45. return true;
  46. }
  47. }
  48. }