5

文档部分描述了如何使用多个身份验证方案:

在某些情况下,例如单页应用程序,最终可能会使用多种身份验证方法。例如,您的应用程序可能使用基于 cookie 的身份验证来登录和 JavaScript 请求的承载身份验证。在某些情况下,您可能有多个身份验证中间件实例。例如,两个 cookie 中间件,其中一个包含基本身份,另一个是在触发多因素身份验证时创建的,因为用户请求了需要额外安全性的操作。

例子:

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
    AuthenticationScheme = "Cookie",
    LoginPath = new PathString("/Account/Unauthorized/"),
    AccessDeniedPath = new PathString("/Account/Forbidden/"),
    AutomaticAuthenticate = false
});

app.UseBearerAuthentication(options =>
{
    options.AuthenticationScheme = "Bearer";
    options.AutomaticAuthenticate = false;
});

但是它只描述了如何使用 Bearer 或 Cookie 身份验证。尚不清楚哪些其他组合是有效的,或者如何正确地向客户端发出不记名或 cookie。

那怎么能做到呢?

4

1 回答 1

5

Facebook、Google 等大型网站使用的一个常见用例是使用多个 cookie 身份验证中间件并将其中一个设置为默认使用AutomaticAuthenticate

app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
    AuthenticationScheme = "InsecureLongLived",
    LoginPath = new PathString("/Account/Unauthorized/"),
    AccessDeniedPath = new PathString("/Account/Forbidden/"),
    AutomaticAuthenticate = true
});
app.UseCookieAuthentication(new CookieAuthenticationOptions()
{
    AuthenticationScheme = "SecureAndShortLived",
    LoginPath = new PathString("/Account/Unauthorized/"),
    AccessDeniedPath = new PathString("/Account/Forbidden/"),
    AutomaticAuthenticate = false
});
  • 默认值是长期存在的,用于非关键身份验证场景,例如在 Facebook 上,这可能是为了查看您的个人资料页面。
  • 更安全和更短暂的用于安全关键用户操作,例如更改密码或个人资料信息。

这使您不必一直使用长期存在的 cookie 登录,但是一旦您需要做一些有潜在危险的事情,您就可以切换到使用寿命更短且因此更安全的 cookie 进行身份验证,这需要用户再次登录。

于 2017-03-06T16:35:04.940 回答