我目前有一个ASP.NET MVC 4网站,其中会员拥有一个帐户,可以使用Facebook和我自己的登录表单登录。我正在使用FormsAuthentication。
我接下来想要使用WebAPI构建一个API,并将我的一些功能暴露给我计划构建的移动客户端。
我没有计划让其他人使用我的API,所以这只适用于我构建的客户端。
我如何在WebAPI上实施安全性?我是否应该使用令牌系统,我可以在客户端上有登录表单,接收凭据,登录,然后返回一个令牌,在每次通话时都会发送回服务器?
我应该在服务器上实现oAuth吗?
答案 0 :(得分:0)
尝试完全RESTful:使用HTTP的内置身份验证系统,其中客户端在每个请求中提供身份验证信息。如果使用SSL,您也可以使用HTTP基本身份验证而不存在任何安全问题,否则HTTP Digest也足够安全用于此目的。
您需要为ASP.NET实现自己的HTTP基本身份验证提供程序,幸运的是它很简单(而且很有趣!)。
它还使用querystring参数击败了需要签名URI的其他系统,这些丑陋且令人讨厌可靠的REStfulness,或带有一个令牌(通常作为cookie传递)。
答案 1 :(得分:0)
关于如何在休息时进行身份验证的神圣战争,你可以只使用表单身份验证。如果您还使用来自同一站点/域的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);
}
显然需要在控制器方法中进行授权。