由于我们的应用程序的性质,我们可以让用户通过大量的auth提供程序进入,其中一些使用OAuth 1.0(特别是LTI)。每当我们不识别登录然后不得不在以后处理复杂的身份合并时,我们不想总是创建新的用户帐户,而是希望邀请显然新的用户通过OpenID来识别自己(Google)和微软主要是因为它涵盖了我们的大多数用户。)我们可以问他们他们的U / P,除了我们不做U / P - 我们一直希望只支持通过第三方身份提供商登录并且不要# 39;我真的想改变它。
所以情况是我们的自定义身份验证方案(LTI / OAuth1.0)收到第三方声明,确定这些声明对我们的系统来说是新的,然后将挑战转发给我们的默认身份验证方案。一旦完成该方案(成功的auth或用户拒绝(即NoResult)),我们理想地返回到原始方案以完成使用提供的声明创建新用户或向现有用户添加额外登录。完成所有这些操作后,将返回最终的AuthenticationTicket,并且请求将在验证后正常进行。
我可能会想到这一切都是错的,如果是这样的话,我很乐意接受更好的指导。但基本的业务要求是,在让传入的个人有机会通过其他登录方法将自己标识为现有用户之前,我不想创建新用户。
目标环境是ASP.NET Core 2.0或2.1。
答案 0 :(得分:3)
ASP.NET核心文件 - >当您选择从第三方提供商登录时,新项目模板(当您选择第三方认证时)会执行类似的操作。它将第三方声明存储在cookie中(已签名)并将您转至注册页面。提交表单后,它会从此cookie中获取声明以及注册详细信息,在数据库中创建用户,核实此临时cookie,并发出其他所有内容的真实身份验证cookie。为了缓解重放攻击,我认为这个中间cookie只是一个会话cookie,并在短时间后过期--5分钟。你肯定是在正确的轨道上。