Authentication 使用单点登录和ADFS从SAML响应获取电子邮件地址
我正在使用ADFS和SAML2.0设置单点登录(SSO)系统。我必须遵守以下我一直坚持的情景: 1) 用户试图访问web资源,但未登录,因此被定向到ADFS SSO服务 2) 用户成功地根据ADF进行身份验证 3) ADFS将SAML响应传递回web资源 4) web资源本身有一个用户数据库,但此处不存在该用户 5) 因此,web资源必须以静默方式创建用户帐户。为此,我需要电子邮件地址Authentication 使用单点登录和ADFS从SAML响应获取电子邮件地址,authentication,single-sign-on,saml,adfs,Authentication,Single Sign On,Saml,Adfs,我正在使用ADFS和SAML2.0设置单点登录(SSO)系统。我必须遵守以下我一直坚持的情景: 1) 用户试图访问web资源,但未登录,因此被定向到ADFS SSO服务 2) 用户成功地根据ADF进行身份验证 3) ADFS将SAML响应传递回web资源 4) web资源本身有一个用户数据库,但此处不存在该用户 5) 因此,web资源必须以静默方式创建用户帐户。为此,我需要电子邮件地址 那么,是否可以将ADFS配置为在成功的SAML响应消息中返回用户的电子邮件地址?您可以将ADFS配置为返回电子
那么,是否可以将ADFS配置为在成功的SAML响应消息中返回用户的电子邮件地址?您可以将ADFS配置为返回电子邮件声明,前提是ADFS可以通过某种方式获取此信息(Active Directory或其他一些属性存储,可能是它可以访问的数据库?)并且假设您的应用程序设置为解密返回的令牌以读取内部声明 假设这是ADFS 2.0:
部分下,确保已将其设置为保存引导令牌(
)。在您的代码中,您现在可以通过执行以下操作随时访问电子邮件声明:
string email = (User.Identity as IClaimsIdentity).Claims.Where(c => c.ClaimType == ClaimTypes.Email).FirstOrDefault().Value;
如果未将其设置为保存引导令牌,则那里的声明集合将为空
不过,在这一过程中,可能还有很多其他因素会把事情搞得一团糟。希望这会让你走上正轨。我应该补充一点,用户使用电子邮件地址作为用户名登录。因为你说他们使用电子邮件登录,我假设他们不是域成员。在这种情况下,无论ADF使用什么来查找他们的电子邮件/密码组合,或者您需要访问的任何属性存储来填充声明值。我的web资源是ASP.net 4.0网站。我的理解是,ADFS方面的东西已经设置好了,并且以前用于Java实现。只是现在,它需要转换为.net 4.0。不幸的是,似乎没有人知道Java系统是如何工作的,但我认为我必须假设以前也会遇到同样的问题。请参阅我的编辑。我添加了一些关于如何从ASP.NET网站访问电子邮件声明的详细信息。因为听起来你的环境已经基本建立好了,你可以忽略这些部分,但我还是把它们放进去了,以防其他人偶然发现这个答案。