0

我们计划使用 ASP.Net MVC3 创建 JSON API。为了处理安全性,我们将有一个 API 密钥,或者可能是用户名/密码,可能还有一个时间戳。
我之前没有做过任何 MVC,但我想知道是否没有一些简单的方法可以将代码添加到 Global.asax 以确保所有请求都以某种方式在其中包含这些变量。这样,除非包含 API 密钥,否则任何请求都无法通过。
这样我们就不必为网站的每个部分添加 API 密钥处理。

4

1 回答 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 回答