为什么没有对asp.net 5.0预览进行身份验证 - web api模板 -

时间:2015-05-12 20:32:04

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

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

我可以选择asp.net 4.6或5.0预览web api模板。旧的4.6已经

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

但是这个模板缺乏身份验证,但为什么呢?

3 个答案:

答案 0 :(得分:2)

在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" });

});

答案 1 :(得分:1)

他们故意将其排除在外,因为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网络应用程序中的app.UseMvc()之前。 我希望这会有所帮助:)

答案 2 :(得分:1)

当你在asp.net 5中选择mvc项目模板时,它仍然是一个选项。所以只需使用mvc模板并在那里添加你的web api控制器。无论如何,Web api和mvc在v5中使用相同的控制器。当然你可能想要修改一些auth控制器来返回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的示例,文档和入门说明。