我在新的Visual Studio 2015中创建了一个Web项目。
我可以选择asp.net 4.6或5.0预览web api模板。旧的4.6已经
身份验证但我想使用新的5.0预览也是web api。
但是这个模板缺乏身份验证,但为什么呢?
答案 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的示例,文档和入门说明。