一起使用承载令牌和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)。