具有SupportsCredentials = true的WebAPI EnableCors不起作用

时间:2014-05-05 21:12:38

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

我有一个部署到mysite.mydomain.co的MVC站点,它针对ADFS进行身份验证并创建一个身份验证cookie:

public partial class Startup
{
    public void ConfigureUserAuth(IAppBuilder app)
    {
        app.SetDefaultSignInAsAuthenticationType(WsFederationAuthenticationDefaults.AuthenticationType);

        app.UseCookieAuthentication(new CookieAuthenticationOptions()
            {
                AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
            });

        app.UseWsFederationAuthentication(
            new WsFederationAuthenticationOptions
            {
                MetadataAddress = ConfigurationManager.AppSettings["adsfs.MetadataAddress"],
                Wtrealm = ConfigurationManager.AppSettings["adsfs.Wtrealm"]
            });
    }
}

在启用了CORS的“myapi.mydomain.com”上部署了一个WebAPI站点:

GlobalConfiguration.Configuration.EnableCors(new EnableCorsAttribute("https://mysite.mydomain.com", "*", "*") { SupportsCredentials = true });

用户访问mysite.mydomain.com。 MVC站点针对ADFS进行身份验证,我看到auth cookie设置没有问题。

我的应用程序主要是SPA,所以从javascript开始,使用jQuery向myapi.mydomain.com调用AJAX,将withCredentials选项设置为true

$.ajaxSetup({
    xhrFields: { withCredentials: true }
});

该选项应该向API发送安全凭证(cookie)。在运行时,我没有看到cookie被设置为API,并且我得到了401(未经授权的)错误。

如果我在localhost上运行相同的代码(当然,除了将原点更改为localhost)我看到cookie流向API没有问题。我最好的猜测是它有效,因为它是相同的子域(localhost),而在我的服务器上是“mysite”vs“myapi”。

有什么想法吗?

0 个答案:

没有答案