我有一个部署到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”。
有什么想法吗?