使用ASP.NET将多个基于声明的身份提供者与一个用户相关联

Hal*_*nac 6 claims-based-identity acs asp.net-mvc-4 .net-4.5

在使用.NET 4.5框架和Azure访问控制服务(ACS)的ASP.NET MVC 4应用程序中,我希望为用户提供多种身份验证可能性(即Google,Facebook,Windows Live等).将单个用户与多个身份提供商关联的"最佳做法"是什么?

例如,假设用户有一天登录Google,然后第二天进入另一个浏览器并使用Facebook登录.我怎么知道将Facebook登录与以前的Google登录关联到同一个用户?

Eug*_*ace 2

如果您使用 ACS,则可以使用 ACS 上的声明转换将来自每个 IdP(例如 Gogle、Yahoo!、FB 等)的信息转换为通用句柄。人们使用的常见句柄是用户的电子邮件。但是,如果您想接受映射到同一用户的许多电子邮件,那么您需要引入自己的唯一 ID(作为声明)并将 IdP 提供的声明映射到其中:

  • myemail@gmail.com(电子邮件 - Google)->(用户 ID - YourApp)user_1234
  • myotheremail@yahoo.com(电子邮件 - Yahoo!)->(用户 ID - YourApp)user_1234
  • 64746374613847349 (NameIdentifier - LiveId) -> (UserId - YourApp) user_1234

您可以通过 ACS API 自动执行此操作。您还应该处理用户第一次登录您的站点的情况(例如,要求用户提供电子邮件并发送将触发映射的确认消息)。

据推测,您正在使用此信息从应用程序中的本地数据库检索数据,否则,您可以只对声明中的所有内容进行编码,而不必担心任何等效性。声明通常是对通用配置文件数据进行编码的好地方。(例如角色等)