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

时间:2015-05-25 11:16:03

标签: c# asp.net oauth asp.net-core asp.net-core-mvc

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

我当前的应用使用基于表单的身份验证。但是,我想使用OAuth。我正在查看Security module并且很好奇OAuth应该使用什么。我看到了Microsoft.AspNet.Authentication.OAuthMicrosoft.AspNet.Authentication.OAuthBearer的选项。

其中哪些用于让用户登录?

是否有人知道展示这些内容的示例/示例?

1 个答案:

答案 0 :(得分:12)

<强> Microsoft.AspNet.Authentication.OAuth

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

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

An introduction to the ASP.NET 5 Generic OAuth Provider

<强> 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()
    };
});

在创建SPA(单页应用程序)或保护 AJAX 请求时使用承载标记。

Cookie认证适用于服务器请求。但服务终点(无论是否允许 C ross O rigin R 资源 S haring)更容易受到攻击 CSRF XSS 攻击。

许多应用程序同时使用:

通常的做法是对 AJAX 请求的页面请求和承载令牌使用Cookie身份验证。

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

在这个Stackoverflow answer中,Matt DeKrey在使用

概述其实施方面做得很好

[Authorize("Bearer")]

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

许多应用程序单独依赖Cookie:

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

如果您正在为成千上万的用户开发网站,那么您可能会安全地依赖Cookie。

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

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