一起使用承载令牌和cookieauthentication

我有一个页面的应用程序 – 或多或less基于MVC5 SPA模板 – 使用承载令牌进行身份validation。

该网站也有一些传统的MVC页面需要安全,但使用cookieauthentication

在Startup.Auth中,我可以启用这两种types的授权:

app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseOAuthBearerTokens(OAuthOptions); 

然而,这似乎有一个副作用,即每当从SPA发送一个AJAX请求时,它就发送头中的不记名令牌 cookie。

而我真正想要的行为是, 只有不记名的令牌用于WebAPI调用,并且只有MVC调用的cookie。

我也想MVC调用redirect到一个login页面时,未经授权(设置为CookieAuthenticationOption),但显然,我不希望这种情况发生在进行API调用。

有一种方法可以在一个应用程序中使用这种types的混合模式身份validation吗? 也许通过path/路由filter?

我想我是这样做的: –

Startup.Auth正在连接OWINpipe道,所以在那里包含Cookies和Tokens是正确的。 但是,对cookie选项的一个更改指定了它应该应用于的身份validationtypes:

 CookieOptions = new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie }; 

然后我需要configurationWebAPI只使用令牌:

 public static void Configure(HttpConfiguration config) { // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); } 

这似乎达到了我想要的。 WebAPI只使用持有者令牌而不使用cookie,一些常规的MVC页面一旦login就使用cookie(使用AuthenticationManager)。