如何允许OWIN令牌请求的特定CORS起源,标头和方法?

时间:2014-07-29 01:15:02

标签: cors owin asp.net-web-api2

我们正在使用web api和OWIN来创建我们自己的身份验证和授权提供程序。这一切都很好,但现在我们的任务是允许CORS请求。

CorsHttpConfigurationExtensions为我们的api工作,我们还使用CorsExtensions处理了令牌请求。不过,这就是:这一行

 app.UseCors(CorsOptions.AllowAll);
Startup.ConfigureAuth()中的

允许所有来源,标题项和方法,不是吗?它相当于

config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
WebApiConfig.Configure()中的

- 对吧? AllowAll只有一个枚举值CorsOptions。并且没有地方用任何类型的属性来装饰令牌路线。

我不太关心标题和动词(方法);据推测,OWIN组件正在处理那些,例如限制为POST。但我们真的希望将原始标头限制为特定域。有谁知道我们如何才能实现这一目标?

2 个答案:

答案 0 :(得分:5)

using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using Microsoft.Owin.Cors;
using System.Web.Cors;

[assembly: OwinStartup(typeof(SignalRSelfHost.Startup))]

namespace SignalRSelfHost
{
    public class Startup
    {

        public void Configuration(IAppBuilder app)
        {
            var policy = new CorsPolicy()
            {
                AllowAnyHeader = true,
                AllowAnyMethod = true,
                SupportsCredentials = true
            };

            // list of domains that are allowed can be added here
            policy.Origins.Add("domain"); 
            //be sure to include the port:
            //example: "http://localhost:8081"

            app.UseCors(new CorsOptions
            {
                PolicyProvider = new CorsPolicyProvider
                {
                    PolicyResolver = context => Task.FromResult(policy)
                }
            });

            app.MapSignalR();
        }
    }
}

请参阅此stackoverflow link

答案 1 :(得分:0)

在授予令牌时使用OWIN OAuth,您应该将原始标头添加到响应中,然后您可以添加所需的源,查看本教程,它获取与客户端关联的源什么被作为原点注入标题。

http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/

希望有所帮助。