ASP.NET 5 (vNext) 中的身份验证
Authentication in ASP.NET 5 (vNext)
我有一个传统的 ASP.NET 应用程序,我想将其移动到 ASP.NET 5 (vNext)。我这样做是为了学习。
我当前的应用程序使用基于表单的身份验证。但是,我想使用 OAuth。我正在查看 Security module 并且很好奇 OAuth 应该使用什么。我看到 Microsoft.AspNet.Authentication.OAuth
和 Microsoft.AspNet.Authentication.OAuthBearer
的选项。
其中哪些用于让用户登录?
有谁知道 sample/example 展示这些的实际效果?
Microsoft.AspNet.Authentication.OAuth
- 允许第 3 方标识符(例如 Google、Facebook)为您验证用户身份,免除您的用户的烦恼注册。
- 允许其他应用程序使用您的应用程序进行身份验证
一旦您的用户通过第 3 方的身份验证,OWIN 中间件会读取他们的 OAuth cookie 并创建特定于域的声明基于 cookie。只要 cookie 可用(存在、未过期且未损坏),您的用户就会保持身份验证状态。
An introduction to the ASP.NET 5 Generic OAuth Provider
Microsoft.AspNet.Authentication.OAuthBearer
创建不记名令牌。当用户登录端点 (Web-API),或由第 3 方进行身份验证时,OWIN 中间- ware returns 不记名令牌。不记名令牌与所有服务请求一起发送,以代替 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) 更容易受到 CSRF 和 XSS 攻击。
许多应用程序同时使用:
常见的做法是对页面请求使用 cookie 身份验证,对 AJAX 请求使用不记名令牌。
您需要区分使用 cookie 的资源和使用令牌的资源。
在此 中,Matt DeKrey 很好地概述了他利用
的实现
[Authorize("Bearer")]
对于应该使用不记名令牌而不是基于标准 cookie 的 [Authorize]
属性的控制器或方法。
许多应用程序仅依赖于 Cookie:
您的应用程序在依赖 cookie 时对 CSRF 攻击有多脆弱?这是有争议的。许多网站仅依靠 cookie,从不遇到问题。答案可能更多地取决于您的流量级别和安全需求。
如果您正在为数以万计的用户开发网站,您可能依赖 cookie 是安全的。
如果您要为数百万用户提供服务或保护重要的财务数据,您的异步调用应依赖不记名令牌。
注意: 你提到使用表单身份验证,我强烈建议使用 Identity。该框架与开箱即用的 OWIN 集成,为您提供两种类型的功能。
我有一个传统的 ASP.NET 应用程序,我想将其移动到 ASP.NET 5 (vNext)。我这样做是为了学习。
我当前的应用程序使用基于表单的身份验证。但是,我想使用 OAuth。我正在查看 Security module 并且很好奇 OAuth 应该使用什么。我看到 Microsoft.AspNet.Authentication.OAuth
和 Microsoft.AspNet.Authentication.OAuthBearer
的选项。
其中哪些用于让用户登录?
有谁知道 sample/example 展示这些的实际效果?
Microsoft.AspNet.Authentication.OAuth
- 允许第 3 方标识符(例如 Google、Facebook)为您验证用户身份,免除您的用户的烦恼注册。
- 允许其他应用程序使用您的应用程序进行身份验证
一旦您的用户通过第 3 方的身份验证,OWIN 中间件会读取他们的 OAuth cookie 并创建特定于域的声明基于 cookie。只要 cookie 可用(存在、未过期且未损坏),您的用户就会保持身份验证状态。
An introduction to the ASP.NET 5 Generic OAuth Provider
Microsoft.AspNet.Authentication.OAuthBearer
创建不记名令牌。当用户登录端点 (Web-API),或由第 3 方进行身份验证时,OWIN 中间- ware returns 不记名令牌。不记名令牌与所有服务请求一起发送,以代替 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) 更容易受到 CSRF 和 XSS 攻击。
许多应用程序同时使用:
常见的做法是对页面请求使用 cookie 身份验证,对 AJAX 请求使用不记名令牌。
您需要区分使用 cookie 的资源和使用令牌的资源。
在此
[Authorize("Bearer")]
对于应该使用不记名令牌而不是基于标准 cookie 的 [Authorize]
属性的控制器或方法。
许多应用程序仅依赖于 Cookie:
您的应用程序在依赖 cookie 时对 CSRF 攻击有多脆弱?这是有争议的。许多网站仅依靠 cookie,从不遇到问题。答案可能更多地取决于您的流量级别和安全需求。
如果您正在为数以万计的用户开发网站,您可能依赖 cookie 是安全的。
如果您要为数百万用户提供服务或保护重要的财务数据,您的异步调用应依赖不记名令牌。
注意: 你提到使用表单身份验证,我强烈建议使用 Identity。该框架与开箱即用的 OWIN 集成,为您提供两种类型的功能。