using System.Linq;
using System.Web.Http;
namespace Lottomat.SOA.API.Attribute
{
///
/// 自定义此特性用于接口的身份验证
///
public class RequestAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
//从http请求的头里面获取身份验证信息,验证是否是请求发起方的ticket
var authorization = actionContext.Request.Headers.Authorization;
if (authorization != null && authorization.Parameter != null)
{
//获取授权信息
var encryptTicket = authorization.Parameter;
if (this.ValidateAppKey(encryptTicket))
{
base.IsAuthorized(actionContext);
}
else
{
base.HandleUnauthorizedRequest(actionContext);
}
}
//如果取不到身份验证信息,并且不允许匿名访问,则返回未验证401
else
{
var attributes = actionContext.ActionDescriptor.GetCustomAttributes();
bool isAnonymous = attributes.Any(a => a is AllowAnonymousAttribute);
if (isAnonymous)
base.OnAuthorization(actionContext);
else
base.HandleUnauthorizedRequest(actionContext);
}
}
///
/// 校验授权信息
///
///
///
private bool ValidateAppKey(string encryptTicket)
{
return true;
}
}
}