2015-05-25 62 views
15

我有一个传统的ASP.NET应用程序,我想移动到ASP.NET 5(vNext)。我正在做这个学习练习。身份验证在ASP.NET 5(vNext)

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

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

有没有人知道样本/示例显示这些在行动?

回答

12

Microsoft.AspNet.Authentication.OAuth

  • 允许第三方标识符(例如谷歌Facebook的)来验证你的用户,节省了您的用户注册的烦恼。
  • 允许其他应用程序使用应用程序的认证

一旦你的用户是通过第三方认证,则OWIN中间件读取其的OAuth饼干和创建基于声明的域特定的cookie 。只要cookie可用(存在,未过期和未损坏),您的用户仍保持身份验证。

An introduction to the ASP.NET 5 Generic OAuth Provider

Microsoft.AspNet.Authentication.OAuthBearer

创建承载的令牌。当用户登录终端点(Web-API)或由第三方进行身份验证时,中间件会返回一个不记名令牌。不记名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认证被认为是足够的。但服务端点(无论它们是否允许Ç罗斯ö rigin ř esource 小号哈林)更容易受到CSRFXSS攻击。


许多应用程序同时使用:

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

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

在这种Stackoverflow answer,马特DeKrey做概述利用

[Authorize("Bearer")]

对于应该承载令牌使用而不是标准的基于Cookie的属性[Authorize]控制器或方法实现了一个很好的工作。


许多应用程序依赖于单独饼干:

是多么脆弱的饼干依靠当你的应用程序CSRF攻击?这是有争议的。许多网站仅依靠cookie而不会面临问题。答案可能更多取决于您的流量级别和安全需求。

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

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


注:你提到使用窗体身份验证,我会强烈建议使用身份。该框架与OWIN开箱即用,可为您提供两种类型的功能。

+0

什么是默认机制标识使用?在ASP.NET 5中,如果我只是说app.UseIdentity()并使用[Authorize]属性,一切正常,但我怎么知道它是否使用基于Cookie或Token的身份验证? –

+0

@VladimirDjurdjevic,默认为cookie认证。这是一个关于实现令牌认证的好帖子http://stackoverflow.com/questions/29048122/token-based-authentication-in-asp-net-5-vnext –