我有一个传统的ASP.NET应用程序,我想移到 ASP.NET 5(vNext)。我正在将其作为学习练习。

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

其中哪个用于允许用户登录?

有谁知道一个示例/示例显示它们在起作用吗?

最佳答案

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

    创建承载 token 。当用户登录到端点( Web-API )或由第三方认证时, OWIN 中间件将返回承载 token 。承载 token 与所有服务请求一起发送,以代替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 请求时,会使用承载 token 。

    Cookie身份验证被认为足以满足服务器的请求。但是服务端点(无论是否允许 C ross O rigin R esource S haring)更容易受到 CSRF XSS攻击。

    许多应用程序同时使用:

    通常的做法是对页面请求使用cookie身份验证,对 AJAX 请求使用承载 token 。

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

    在此Stackoverflow answer中,Matt DeKrey很好地概述了利用
    [Authorize("Bearer")]
    对于应使用承载 token 而不是基于标准cookie的[Authorize]属性的 Controller 或方法。

    许多应用程序仅依赖Cookie:

    依靠cookie时,您的应用程序如何受到 CSRF 攻击?这值得商de。许多站点仅依靠Cookie,就永远不会遇到问题。答案可能更多取决于您的流量级别和安全需求。

    如果要为成千上万的用户开发站点,则可以安全地依靠Cookie。

    如果您要为数百万个用户提供服务或保护重要的财务数据,则异步调用应依靠承载 token 。

    注意:您提到使用表单例份验证,我强烈建议您使用身份。该框架与 OWIN 集成在一起,为您提供两种功能。

    关于c# - ASP.NET 5中的身份验证(vNext),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30437112/

    10-12 07:40
    查看更多