【问题标题】:subdomain CORS in webApi 2webApi 2 中的子域 CORS
【发布时间】:2014-03-19 16:03:44
【问题描述】:

我正在使用 WebApi,就像我从 http://t.co/mt9wIL8gLA 学到的一样

如果我确切地知道客户请求的完美来源 URI,一切都会很好。 太糟糕了,我正在编写一个企业范围的 API,所以我的请求,说 http://apps.contoso.com/myApp/api/foobar

可能来自我域中的所有应用,例如:

http://apps.contoso.com/CRMApp

http://apps.contoso.com/XYZ

http://www.contoso.com/LegacyApp

http://test.contoso.com/newApps/WowApp ... 以及我的企业构建的所有新应用。

解决此问题的最佳方法是什么?使用Origins="*" 很俗气,将来源添加到我的 WS 源并重新部署很俗气。

我当前的解决方案是编写一个自定义 CorsPolicyAttribute,例如 http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#cors-policy-providers

并从 web.config 中的 appsettings 读取允许的来源。 更好的一点是,在自定义属性中,检查请求 Origin: 标头是否来自 contoso.com,可能带有正则表达式,并将其添加到允许的来源。

我想知道是否有更好、更标准的方法。

【问题讨论】:

    标签: asp.net cors asp.net-web-api


    【解决方案1】:

    使用DynamicPolicyProviderFactory。这就是我使用的...我什至在前几天发布了一个question,其中显示了如何将允许的域添加到 web.config 文件中。

    【讨论】:

      【解决方案2】:

      我最终只是编写了一个 AuthorizationFilterAttribute,尽管我可能刚刚完成了一个常规的 FilterAttribute。

      public class FilterReferals : AuthorizationFilterAttribute
      {
          public override void OnAuthorization(HttpActionContext actionContext)
          {
              var request = actionContext.Request;
      
              if (!AllowedReferers.GetAllowedReferersList().Contains(request.Headers.Referrer?.Host.ToLower()))
              {
                  Challenge(actionContext);
                  return;
              }
      
              base.OnAuthorization(actionContext);
          }
      
          void Challenge(HttpActionContext actionContext)
          {
              var host = actionContext.Request.RequestUri.DnsSafeHost;
              actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
              actionContext.Response.Headers.Add("WWW-Authenticate", string.Format("Basic realm=\"{0}\"", host));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-07-18
        • 1970-01-01
        • 2014-01-05
        • 1970-01-01
        • 2017-07-05
        • 2019-11-15
        • 2023-03-16
        • 2019-09-07
        • 2021-01-12
        相关资源
        最近更新 更多