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

Posted

技术标签:

【中文标题】ASP.NET 5 (vNext) 中的身份验证【英文标题】:Authentication in ASP.NET 5 (vNext) 【发布时间】:2015-08-06 20:41:19 【问题描述】:

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

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

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

有谁知道展示这些操作的示例/示例?

【问题讨论】:

【参考方案1】:

Microsoft.AspNet.Authentication.OAuth

允许第 3 方标识符(例如 GoogleFacebook)为您验证用户身份,让您的用户免去注册的烦恼。 允许其他应用使用您的应用进行身份验证

一旦您的用户通过第三方身份验证,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 身份验证被认为足以满足服务器请求。但是服务端点(无论它们是否允许 Cross Origin Resource Sharing)更容易受到攻击CSRFXSS 攻击。


许多应用程序同时使用这两种方法:

一种常见的做法是对页面请求使用 cookie 身份验证,对 AJAX 请求使用不记名令牌。

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

在这个*** answer 中,Matt DeKrey 很好地概述了他的实现,利用

[Authorize("Bearer")]

对于应该使用不记名令牌而不是基于标准 cookie 的 [Authorize] 属性的控制器或方法。


许多应用程序仅依赖 Cookie:

在依赖 cookie 时,您的应用程序对 CSRF 攻击的脆弱性如何?这是值得商榷的。许多网站仅依靠 cookie,从不遇到问题。答案可能更多取决于您的流量级别和安全需求。

如果您正在为数以万计的用户开发网站,那么依靠 cookie 可能是安全的。

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


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

【讨论】:

默认机制身份使用什么?在 ASP.NET 5 中,如果我只是说 app.UseIdentity() 并使用 [Authorize] 属性,一切正常,但我怎么知道它是否使用基于 Cookie 或 Token 的身份验证? @VladimirDjurdjevic,默认为 cookie 身份验证。这是一篇关于实现令牌身份验证的好帖子***.com/questions/29048122/…

以上是关于ASP.NET 5 (vNext) 中的身份验证的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net vnext 上使用不记名令牌身份验证刷新令牌

从 ASP.NET vNext beta5 移动到 beta7 后 JWT Bearer 令牌身份验证错误

如何在 ASP.NET 5 MVC 6 (vNext) 中定义 Identity 的密码规则?

Membership 介绍

带有 Angular 6 的 Asp.Net Core 2.1 中的 Windows 身份验证 - Chrome 连续登录提示

ASP.NET 5 中的 Web API 身份验证