webApi 2 中的子域 CORS

问题描述 投票:0回答:2

我正在关注 WebAPI 2 中的 CORS 文档

如果我知道客户请求的确切来源 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
,如有关自定义 CORS 策略提供程序部分中所述,并从
appsettings
中的
web.config
读取允许的来源。更好的一点是,在自定义属性内,检查请求 Origin: 标头是否来自 contoso.com,可能使用正则表达式,然后将其添加到允许的来源。 我想知道是否有更好、更标准的方法。

asp.net cors asp.net-web-api
2个回答
4
投票
DynamicPolicyProviderFactory

。这就是我使用的...前几天我什至发布了一个关于它的问题,展示了如何将允许的域添加到 web.config 文件中。


0
投票

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)); } }

© www.soinside.com 2019 - 2024. All rights reserved.