【问题标题】:Can someone provide a CorsPolicy implementation with an explicit Origins list?有人可以提供带有明确 Origins 列表的 CorsPolicy 实现吗?
【发布时间】:2014-10-30 15:55:09
【问题描述】:

参考SignalR Hubs API Guide

在配置cmets中表示如下信息:

// Setup the CORS middleware to run before SignalR.
// By default this will allow all origins. You can 
// configure the set of origins and/or http verbs by
// providing a cors options with a different policy.
map.UseCors(CorsOptions.AllowAll);

但是,System.Web.CorsPolicy 的 Origins 属性有一个私有设置器,没有允许注入源的构造函数,也没有公开的设置器方法。关于 Origins 列表,它似乎只公开了一个“AllowAllOrigins”属性,然后是一个无用的 Origins getter,它只反映了在 CorsPolicy 构建期间构造的空 List。


特别注意,默认 app.UseCors(CorsOptions.AllowAll) 设置完全不连贯。根据它自己的工具提示,它是“允许所有标头、所有方法、任何来源并支持凭据的策略。”

A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true

我的配置目前是“愚蠢简单”的 SignalR 配置

public void Configuration(IAppBuilder app)
{                
    app.UseCors(CorsOptions.AllowAll);
    app.MapSignalR();
}

任何人都可以提供一个 Microsoft.Owin.Cors.CorsMiddleware 示例,以使用 Access-Control-Allow-Origin 的显式白名单重新实现“AllowAll”选项吗?

【问题讨论】:

    标签: signalr cors owin


    【解决方案1】:

    你看过the sourceCorsOptions.AllowAll 吗?它显示了CorsOptions 是如何创建的。你可以做类似的事情

    var policy = new CorsPolicy
    {
        AllowAnyHeader = true,
        AllowAnyMethod = true,
        AllowAnyOrigin = false, // False by default, just left it here.
        SupportsCredentials = true
    };
    
    policy.Origins.Add("http://foo.example.com");
    
    app.UseCors(new CorsOptions
    {
        PolicyProvider = new CorsPolicyProvider
        {
            PolicyResolver = context => Task.FromResult(policy)
        }
    });
    

    如您所见,您设置了PolicyResolver 属性,即Func<IOwinRequest, Task<CorsPolicy>>。基于IOwinContext(对于当前请求),您需要返回一个CorsPolicy(另请参阅its source)。这应该具有微调策略所需的属性。列表属性具有私有设置器(可能是为了避免潜在的null 指针),但它们都在默认构造函数中初始化,因此您应该可以添加它们。

    【讨论】:

    • 感谢样品; CorsPolicy 的来源表明 Origins 设置器是私有的。是否有指定来源的替代方法?
    • 糟糕。对于那个很抱歉。 setter 是私有的,但您仍然可以添加到列表中。查看更新的答案:)
    • 也非常感谢 - 一个建议是您可以在 PolicyResolved 之外创建一次 CorsPolicy。
    • 我刚刚意识到我没有接受你的帖子作为我问题的答案。固定
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多