我正在使用ADFS和SAML 2.0设置单点登录(SSO)系统。我必须遵循以下情况:
1)用户尝试访问Web资源,未登录,因此被定向到ADFS SSO服务。
2)用户成功通过ADFS验证。
3)ADFS将SAML响应传递回Web资源。
4)Web资源本身有一个用户数据库,但用户不存在。
5)因此,Web资源必须以静默方式创建用户帐户。为此,我需要电子邮件地址。
那么,是否可以将ADFS配置为在成功的SAML响应消息中返回用户的电子邮件地址?
答案 0 :(得分:3)
您可以配置ADFS以返回电子邮件声明,前提是ADFS有一些方法可以获取此声明(Active Directory或其他一些属性存储,可能是它可以访问的数据库吗?)并且如果您的应用程序设置为解密返回的令牌阅读里面的声明。
假设这是ADFS 2.0:
如果您可以从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;
如果您没有将其设置为保存引导令牌,则声明集合将为空。
但是,可能会有许多其他因素可能导致事情变得混乱。希望这会让你走上正轨。