【问题标题】:Why is there no authentication for the asp.net 5.0 preview - web api template -为什么asp.net 5.0预览版没有认证-web api模板-
【发布时间】:2015-05-14 20:15:06
【问题描述】:

我在新的 Visual Studio 2015 中创建了一个 Web 项目。

我可以选择 asp.net 4.6 或 5.0 预览 web api 模板。老4.6有

身份验证,但我也想使用新的 5.0 预览版 web api。

但是这个模板缺少认证,为什么?

【问题讨论】:

  • 因为在 OWIN 世界中,您可以在需要时提供所需的身份验证。
  • 您是否在新项目窗口中点击了change authentication 并选择了要包含的身份验证方案?
  • @Claies 我无法点击“更改身份验证”,因为该按钮在 asp.net 5.0 预览版 - web api 模板 - 中被禁用。
  • @DavidL 我想这句话永远不会错:“您在需要时提供一些东西”:P asp.net 4.6 web api 模板也使用 OWIN,但我可以更改身份验证...
  • @Pascal 同意 :)。然而,说真的,这是 ASP.NET 5 世界的新范式。 “你只得到你明确说你需要的东西。如果你不要求,你就不会得到它”。这只是这种心态的另一个例子。

标签: c# asp.net visual-studio-2015


【解决方案1】:

在 OWIN 世界中,您可以在需要时提供所需的身份验证。他是 ASP.NET 5 世界的新范例。 “你只得到你明确说你需要的东西。如果你不要求,你就不会得到它”。这只是这种心态的另一个例子。

Scott Guthrie 在他最近的post 中指出了这一点:

ASP.NET 5 引入了一个新的 HTTP 请求管道,它是模块化的,因此 您可以只添加您需要的组件。管道也没有 不再依赖 System.Web。通过减少在 管道,您的应用程序可以体验到更好的吞吐量和更优化的 HTTP 堆栈。新管道基于从 Katana 项目,也支持 OWIN。

要自定义管道中使用的组件,请使用 在 Startup 类中配置方法。使用 Configure 方法 在请求中指定要“使用”的中间件 管道。 ASP.NET 5 已经包含了许多 Katana 项目的中间件,例如静态文件的中间件, 身份验证和诊断。下图显示了一些 您可以在项目的管道中添加或删除的功能。

您可以非常快速地插入安全性;您只需要指定您将使用的内容。

public void Configure(IApplicationBuilder app)
{
    // Add static files to the request pipeline.
    app.UseStaticFiles();
 
    // Add cookie-based authentication to the request pipeline.
    app.UseIdentity();
 
    // Add MVC and routing to the request pipeline.
    app.UseMvc(routes =>
    {
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });
 
});

【讨论】:

    【解决方案2】:

    他们确实故意将其排除在外,因为它不再是构建 ASP.NET 以使其工作的方式。这是一个完整的重写,不再依赖于以前的安全模板工作所需的 System.Web。该框架采用了他们从 OWIN 中学到的知识并将其结合起来。 ASP.NET 5 框架是新一代的 OWIN。但是中间件的添加完全一样。以前的 OWIN 中间件库应该在 ASP.NET 5 中工作。

    @Pascal @DavidL 的意思是,在您的 Web 应用程序的管道中,您将身份验证添加为中间件。您可以将此作为 IAppBuilder 上的扩展方法。

    首先,您需要在 project.json 文件中添加身份验证库作为依赖项:

    "dependencies": {
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
        "Microsoft.AspNet.Mvc": "6.0.0-beta4",
        "Microsoft.AspNet.Authentication.Cookies": "1.0.0-*",
    

    那你应该看看官方MicroSoft ASP.NET Security GitHub page上的例子

    看线条:

     using Microsoft.AspNet.Authentication.Cookies;
    

    和:

            app.UseCookieAuthentication(options =>
            {
                options.AutomaticAuthentication = true;
            });
    
            app.Run(async context =>
            {
                if (string.IsNullOrEmpty(context.User.Identity.Name))
                {
                    var user = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, "bob") }));
                           context.Authentication.SignIn(CookieAuthenticationDefaults.AuthenticationScheme, user);
                    context.Response.ContentType = "text/plain";
                    await context.Response.WriteAsync("Hello First timer");
                    return;
                }
    
                context.Response.ContentType = "text/plain";
                await context.Response.WriteAsync("Hello old timer");
            });
    

    这应该在 MVC 6 Web 应用程序中的 app.UseMvc() 之前出现。 我希望这会有所帮助:)

    【讨论】:

    • 仅仅因为他们改变了身份验证的工作方式,这并不意味着他们需要从模板中排除身份验证。他们可以只更新模板代码以使用新的身份验证方法(就像他们使用 mvc 项目模板一样)。
    • @rdans 正确!更何况为什么预览模板没有我想添加的单元测试项目?这也是新范式吗?为什么预览模板引用了旧的 SYSTEM.WEB.XXX ?啊,因为我们在OWIN世界吧...
    【解决方案3】:

    当您在 asp.net 5 中选择 mvc 项目模板时,它仍然是一个选项。所以只需使用 mvc 模板并在其中添加您的 web api 控制器。无论如何,Web api 和 mvc 在 v5 中使用相同的控制器。当然,您可能希望修改一些身份验证控制器以返回 json 而不是视图,以更适合 Web api。

    MS 为准备 asp.net 5 对身份系统进行了很多更改,所以对我来说,他们将其从模板中排除是没有意义的(至少作为一个选项 - 这是它所拥有的一直是)。我希望他们还没有开始更新模板。

    来自 github 自述文件:

    https://github.com/aspnet/Identity

    ASP.NET Identity 是用于构建 ASP.NET Web 应用程序的新成员系统。 ASP.NET Identity 允许您向应用程序添加登录功能,并可以轻松自定义有关登录用户的数据。

    这个项目是 ASP.NET vNext 的一部分。您可以在 Home repo 中找到 ASP.NET vNext 的示例、文档和入门说明。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2014-07-22
      • 1970-01-01
      • 2012-10-11
      • 2015-12-23
      • 2012-01-12
      • 1970-01-01
      相关资源
      最近更新 更多