我有一个网站,允许多种方式验证用户(例如Facebook,Twitter,Windows等)。当用户登录时,每个网站都提供不同的身份名称。我需要找出谁提供了身份( ClaimsIdentity)并相应地为用户选择唯一ID以将特定于应用程序的声明添加到用户声明集。 我创建了一个表来将所有实体与用户主要配置文件表相关联。此表包含身份提供者的名称,身份提供者提供的唯一ID以及配置文件表中的唯一用户ID。
我的问题是,当用户使用这些登录信息登录我的网站时,如何找到身份提供商的名称?问题是如果用户具有用于facebook和twitter的相同电子邮件地址,我无法在身份验证管理器的身份验证方法中找到传入主体中的信息。
答案 0 :(得分:3)
您通常会在每项声明中使用Issuer
和OriginalIssuer
属性。
如果您使用e-mail
作为唯一标识符:
var u = this.User as IClaimsPrincipal;
var c = (u.Identity as IClaimsIdentity)
.Claims
.First( c => c.ClaimType == ClaimTypes.Email );
var issuer = c.Issuer;
var originalIssuer = c.OriginalIssuer;