我们计划使用 ASP.Net MVC3 创建 JSON API。为了处理安全性,我们将有一个 API 密钥,或者可能是用户名/密码,可能还有一个时间戳。
我之前没有做过任何 MVC,但我想知道是否没有一些简单的方法可以将代码添加到 Global.asax 以确保所有请求都以某种方式在其中包含这些变量。这样,除非包含 API 密钥,否则任何请求都无法通过。
这样我们就不必为网站的每个部分添加 API 密钥处理。
问问题
208 次
1 回答
1
创建一个全局授权过滤器 -
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class MyAuthorizationFilterAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
// do Authorization
}
}
然后在 Global.asax 中注册它 -
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyAuthorizationFilterAttribute());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
虽然您可以创建一个定制的身份验证模块 -
public class CustomAuthentication : IHttpModule
{
public void Init(HttpApplication application)
{
application.AuthenticateRequest += new EventHandler(this.Authenticate);
}
public void Authenticate(object source, EventArgs eventArgs)
{
HttpApplication _application = (HttpApplication)source;
HttpContext _context = _application.Context;
// do authentication
// if authenticated set pricipal
// _context.User = new GenericPrincipal(new GenericIdentity("user"), new string[]);
}
public void Dispose() { }
}
然后你只需要在 web.config 中注册模块
<modules runAllManagedModulesForAllRequests="true">
<add name="CustomAuthentication" type="AuthenticationNamespace.CustomAuthentication"/>
</modules>
并将 asp.net 身份验证设置为无 -
<authentication mode="None">
</authentication>
然后您可以检查用户是否在您的 AuthorizationFilter 中进行了身份验证。
if(HttpContext.Current.Request.User.Identity.IsAuthenticated)
于 2012-05-04T20:52:32.510 回答