从本质上讲,这是近两年前对this question的更新@Pinpoint对AspNet.Security.OpenIdConnect.Server
成名的回应非常有帮助。
我只是把咆哮放在最底层,让所有愿意沉迷于沮丧开发者凌晨4点亵渎神灵的人。
我正在开始一些新项目,出于我自己的原因,我想使用最新版本的ASP.NET技术(ASP.NET 5 vNext和MVC 6)来开始。
通常,OAuth2可用于身份验证。
ASP.NET曾用于支持creation of tokens with OAuth2,但it doesn't any more and isn't going to,显然it wasn't very good anyway。有some help,但我仍然有点失去了如何将它与ASP.NET Identity和新的Authorize
属性联系起来。
关于我的实际问题。
AccountController
快速创建帐户并为社交登录或个人登录提供令牌,具有可爱的ASP.NET身份用户存储以保持整洁,密码恢复和一系列标准,现代帐户内容和授权屏幕以确认权限请求(" XXX想要访问您的帐户,这样可以吗?"等等)我发现了一些close,closer和so on的内容。但没有一个匹配。
据我了解,我无法使用ASP.NET 5的基于策略的新授权内容IdentityServer3
。我不能成为唯一想要这种架构的人,有人完成了这个吗?
我觉得每次来保护我的应用程序时,我都会发明一点轮子。
我已经离开授权的东西超过一年,但我已经回来了,男孩的事情发生了变化。而OWIN,Katana,ASP.NET Identity,IdentityServer3,AspNet.Security.OpenIdConnect.Server令人困惑。似乎只有(虽然非常优秀)的侧面项目完全支持基于.NET的安全令牌服务器。通过"副项目",我的意思是对这些伟大的项目没有冒犯,只是没有微软和/或付费支持。
我希望能够进行大量的开发,但我总是对身份验证的实现感到困惑,因为我无法想象这是一个不受欢迎的架构。
对我而言,微软如此巧妙地考虑这样一个标准架构场景似乎令人难以置信。
当我想在我的REST应用程序中实现登录时,我发现自己在一个令人困惑的交叉射击信息交响乐中发生颠倒和内向外。
如果有人想要启动维护的开源模板解决方案,请告诉我们。我厌倦了构建REST的开始,基于令牌的应用程序对于基本上标准的东西来说是如此不必要的复杂。
答案 0 :(得分:5)
这个波浪状,刮风,可怕的互联网上是否有任何样本可以证明以下内容:
基于ASP.NET 5 / MVC 6的REST API,使用ASP.NET Identity和OAuth2进行保护,使用AccountController快速创建帐户并为社交登录或个人登录提供令牌,并使用可靠的ASP.NET Identity用户存储来保持事情整洁,密码恢复和一系列标准,现代帐户的东西,以及确认权限请求的授权屏幕(“XXX想要访问您的帐户,这样可以吗?”等。)
我目前正在开发一个名为OpenIddict的全新身份服务器:它基于ASP.NET Identity 3(ASP.NET 5附带)并在内部使用AspNet.Security.OpenIdConnect.Server来控制整个OIDC流程。它旨在提供开始使用令牌身份验证的最简单方法,并且它与完整的.NET框架和新的.NET Core兼容。
当然,它既不是由微软开发也不是由微软创建(建议他们支持我们),但它符合您的要求:它带有一个控制授权体验的内部控制器(即同意表部分)和依赖于您添加到应用程序的AccountController
来处理本地/外部身份验证过程。
它还处于早期阶段,而且你需要使用ASP.NET 5 / DNX RC2夜间构建才能使用它,但配置非常简单。您只需从AddOpenIddict()
拨打 ConfigureServices
,然后从UseOpenIddict()
添加 Configure
即可。您可以找到更多信息on the GitHub repository。
public void ConfigureServices(IServiceCollection services) {
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders()
.AddOpenIddict(); // Add the OpenIddict services after registering Identity.
}
public void Configure(IApplicationBuilder app) {
app.UseIdentity();
// Add all the external providers you need before registering OpenIddict:
app.UseGoogleAuthentication();
app.UseFacebookAuthentication();
app.UseOpenIddict();
}