除了关于如何进行身份验证的圣战之外,您可以只使用表单身份验证。如果您还使用来自同一站点/域的 Web 界面,并且您的身份验证内容已得到充分考虑,那么这真的很方便和容易。
你的 api 控制器需要一个基类
public class MyApiControllerBase : ApiController
{
public MySecurityContextType SecurityContext { get; set; }
}
一个ActionFilterAttribute
public class AuthenticationContextAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
MyApiControllerBase controller = actionContext.ControllerContext.Controller as MyApiControllerBase ;
if (controller != null)
{
var context = ((HttpContextBase)controller.Request.Properties["MS_HttpContext"]);
HttpCookie cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
controller.SecurityContext= ParseFormsAuthenticationTicket(ticket);
}
}
}
和代码首先创建票证。
LogIn(HttpRequestBase httpRequest, string userName, string password)
{
var context = DoLoginLogic(userName,password);
FormsAuthentication.SetAuthCookie(context, usePersistentCookies);
}
授权显然需要在控制器方法中完成。