ASP.NET 5中的身份验证(vNext)

xam*_*per 15 c# asp.net oauth asp.net-core-mvc asp.net-core

我有一个传统的ASP.NET应用程序,我想转移到ASP.NET 5(vNext).我这样做是为了学习练习.

我当前的应用使用基于表单的身份验证.但是,我想使用OAuth.我正在查看安全模块,很好奇应该用于OAuth.我看到的选项Microsoft.AspNet.Authentication.OAuthMicrosoft.AspNet.Authentication.OAuthBearer.

以下哪些用于让用户登录?

有没有人知道显示这些实际情况的样本/示例?

Dav*_*ich 12

Microsoft.AspNet.Authentication.OAuth

  • 允许第三方标识符(例如Google,Facebook)为您验证用户身份,从而为用户节省注册的烦恼.
  • 允许其他应用使用您的应用进行身份验证

一旦您的用户被第三方认证,OWIN中间件就会读取他们的OAuth cookie并创建一个特定于域的声明式cookie.只要cookie可用(存在,未过期且未损坏),您的用户将保持身份验证.

ASP.NET 5通用OAuth提供程序简介

Microsoft.AspNet.Authentication.OAuthBearer

创建持有人令牌.当用户登录终点(Web-API)或由第三方进行身份验证时,OWIN中间件返回承载令牌.持有者令牌随所有服务请求一起发送,以识别您的用户而不是Cookie.

在初创公司

app.UseOAuthBearerAuthentication(options =>
{
    options.Authority = "http://localhost:5000/oauth/";
    options.Audience = "http://localhost:5000/oauth/resources";

    options.TokenValidationParameters = new TokenValidationParameters
    {
        IssuerSigningKeys = new[] { new X509SecurityKey(cert) },
        ValidateLifetime = false,
    };
    options.AutomaticAuthentication = true;

    options.SecurityTokenValidators = new[]
    {
        new JwtSecurityTokenHandler()
    };
});
Run Code Online (Sandbox Code Playgroud)

创建SPA(单页应用程序)或保护AJAX请求时使用承载令牌.

Cookie身份验证被认为适用于服务器请求.但服务端点(无论它们是否允许Ç罗斯ö rigin ř esource 小号哈林)更容易受到CSRFXSS攻击.


许多应用使用两者:

通常的做法是对页面请求和承载令牌使用cookie身份验证以获取AJAX请求.

您需要区分使用Cookie的资源和使用令牌的资源.

在这个Stackoverflow的答案中,Matt DeKrey在概述他的实现方面做得很好

[Authorize("Bearer")]

对于应使用承载标记而非基于标准cookie的[Authorize]属性的控制器或方法.


许多应用程序仅依赖于Cookie:

在依赖cookie时,您的应用程序对CSRF攻击有多脆弱?这是值得商榷的.许多网站单独依赖cookie,从不面临问题.答案可能更多地取决于您的流量级别和安全需求.

如果您正在为成千上万的用户开发一个站点,那么您可以安全地依赖cookie.

如果您为数百万用户提供服务或保护重要的财务数据,则异步调用应依赖于承载令牌.


注意:您提到使用表单身份验证,我强烈建议您使用身份.该框架与开箱即用的OWIN集成,为您提供两种类型的功能.