使用Single Sign On和ADFS从SAML Response获取电子邮件地址

时间:2012-02-23 14:30:53

标签: authentication single-sign-on saml adfs

我正在使用ADFS和SAML 2.0设置单点登录(SSO)系统。我必须遵循以下情况:

1)用户尝试访问Web资源,未登录,因此被定向到ADFS SSO服务。

2)用户成功通过ADFS验证。

3)ADFS将SAML响应传递回Web资源。

4)Web资源本身有一个用户数据库,但用户不存在。

5)因此,Web资源必须以静默方式创建用户帐户。为此,我需要电子邮件地址。

那么,是否可以将ADFS配置为在成功的SAML响应消息中返回用户的电子邮件地址?

1 个答案:

答案 0 :(得分:3)

您可以配置ADFS以返回电子邮件声明,前提是ADFS有一些方法可以获取此声明(Active Directory或其他一些属性存储,可能是它可以访问的数据库吗?)并且如果您的应用程序设置为解密返回的令牌阅读里面的声明。

假设这是ADFS 2.0:

  1. 将您的网络资源设置为信赖方信任(听起来就像您已经这样做了)
  2. 右键点击RP,然后选择修改声明规则...
  3. 在“颁发转换规则”标签上,为电子邮件地址添加新规则
  4. 如果您可以从Active Directory收到电子邮件,因为您的用户通过域进行身份验证,那么您可以选择“将LDAP属性作为声明发送”规则模板。

    否则,您必须选择“使用自定义规则发送声明”并设置自定义属性存储(对数据库或其他任何内容),并完成编写声明规则的动作。< / p>

    完成设置后,在ASP.NET应用程序中,您需要将其配置为使用ADFS作为令牌发行者。这是通过Windows Identity Framework Microsoft.IdentityModel.dll和相关配置来完成的。如果您已经安装了WIF SDK,那么在Visual Studio中应该有一些额外的选项,即如果右键单击您的Web项目,则应该有一个“添加STS参考”选项。这将运行FedUtil,这是一个自动设置web.config的向导。谷歌围绕如何设置。

    现在您的网站正在使用ADFS进行声明,您需要进行一些更改。在web.config中的<microsoft.identityModel>部分下,确保已将其设置为保存引导令牌(<service saveBootstrapTokens="true">)。在您的代码中,您现在可以通过执行以下操作来访问电子邮件声明:

    string email = (User.Identity as IClaimsIdentity).Claims.Where(c => c.ClaimType == ClaimTypes.Email).FirstOrDefault().Value;
    

    如果您没有将其设置为保存引导令牌,则声明集合将为空。

    但是,可能会有许多其他因素可能导致事情变得混乱。希望这会让你走上正轨。