1

我有一个网站,它允许通过多种方式对用户进行身份验证(例如 facebook、twitter、windows 等)。当用户登录时,每一个都提供不同的身份名称。我需要找出是谁提供了身份(ClaimsIdentity)和相应地为用户选择唯一 ID,以将特定于应用程序的声明添加到用户声明集。我创建了一个表来将所有实体与用户主要配置文件表相关联。此表包含身份提供者的名称、身份提供者提供的唯一 ID 和来自配置文件表的唯一用户 ID。

我的问题是,当用户使用这些登录名登录我的网站时,如何找到身份提供者的名称?问题是,如果用户具有用于 facebook 和 twitter 的相同电子邮件地址,我无法在身份验证管理器的身份验证方法中找到传入主体中的信息。

4

1 回答 1

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;
于 2013-08-05T15:57:31.870 回答