在 ASP.NET Core 中,是不是可以通过将身份验证转发到另一个方案来在一个方案中抢先创建新用户?

Posted

技术标签:

【中文标题】在 ASP.NET Core 中,是不是可以通过将身份验证转发到另一个方案来在一个方案中抢先创建新用户?【英文标题】:In ASP.NET Core, can new user creation be pre-empted in one scheme by forwarding authentication to another scheme?在 ASP.NET Core 中,是否可以通过将身份验证转发到另一个方案来在一个方案中抢先创建新用户? 【发布时间】:2018-05-19 03:53:03 【问题描述】:

由于我们应用程序的性质,我们可以让用户通过大量的身份验证提供程序进入,其中一些使用 OAuth 1.0(特别是 LTI)。与其总是在我们无法识别登录时创建一个新的用户帐户,然后不得不在以后处理复杂的身份合并,我们希望显然邀请 用户通过 OpenID(Google 和 Microsoft主要是因为这涵盖了我们的大多数用户。)我们可以要求他们提供他们的 U/P,但我们不做 U/P - 我们一直倾向于只支持通过 3rd 方身份提供者登录,并且真的不想这样做改变它。

所以场景是我们的自定义身份验证方案 (LTI/OAuth1.0) 接收第 3 方声明,确定这些声明对我们的系统来说是新的,然后将质询转发给我们的默认身份验证方案。完成该方案后(成功的身份验证或用户拒绝(即 NoResult)),理想情况下,我们将返回原始方案以完成使用提供的声明创建新用户或向现有用户添加额外的登录。一旦所有这些都完成,最终的 AuthenticationTicket 将被返回,并且请求将正常进行。

我可能认为这一切都是错误的,如果是这样,我很乐意被引导到更好的方向。但基本的业务要求是,在让新来的个人有机会通过另一种登录方法将自己标识为现有用户之前,我不想创建新用户。

目标环境是 ASP.NET Core 2.0 或 2.1。

【问题讨论】:

这样的两阶段身份验证类似于个人用户帐户模板,它对外部帐户使用两阶段身份验证。本地用户帐户部分是可选的,您可以重复使用外部登录流程。它从通过 Authorize 属性和 cookie auth 发送到登录页面的匿名用户开始。 github.com/aspnet/templating/blob/… 他们在那里选择他们的身份验证类型并被发送出去登录。当他们返回时,您可以继续。 【参考方案1】:

ASP.NET Core 文件 -> 新项目模板(当您选择第 3 方身份验证时)在您选择从第 3 方提供商登录时会执行类似的操作。它将第 3 方声明存储在 cookie(已签名)中,并将您带到注册页面。提交表单后,它会从该 cookie 中获取声明以及注册详细信息,在数据库中创建用户,核对这个临时 cookie,并发出其他一切都需要的真实身份验证 cookie。为了减轻重放攻击,这个中间 cookie 只是一个会话 cookie,并且会在很短的时间后过期——我认为 5 分钟。你肯定是在正确的轨道上。

【讨论】:

以上是关于在 ASP.NET Core 中,是不是可以通过将身份验证转发到另一个方案来在一个方案中抢先创建新用户?的主要内容,如果未能解决你的问题,请参考以下文章

在 ServiceFabric 中托管旧版 ASP.NET(不是 ASP.NET Core)

ASP.NET Core 托管捆绑包 5 是不是也可以运行 .NET/ASP.NET Core 2.1 应用程序?

将 Owin / Katana 与 ASP.NET Core(实际用例)一起使用是不是仍然相关?

使用命令行如何在 ASP.NET 中首先从 DB 搭建脚手架 - 而不是 ASP.NET Core MVC?

详解Asp.Net Core中的Cookies

.NET Core(或 ASP.NET 5)中是不是有 MEF 的替代品