我想允许对我的Web应用程序进行SAML身份验证,包括针对AzureAD作为身份提供程序以及ADFS.(任何人都可以向我指出一个很好的教程或演练吗?)我已经生成SAML请求,从AzureAD获取SAMLP响应,并验证其签名(包括它的SHA256不起作用的事实)默认情况下).
现在,我想从中提取信息以验证发行者并获取用户的电子邮件以识别它们.是否可以通过XML手动执行此操作,还是应该使用Saml2SecurityTokenHandler等类?他们看起来应该这样做,但我发现很难理解所需的所有配置,以及从安全角度来看是否有必要使用这些类.
我的应用程序是多租户,所以我想要代码而不是配置来处理Saml,因为不同的租户将使用不同的身份验证选项.
这篇博客说不使用ConfigurationBasedIssuerNameRegistry而是指向[ValidatingIssuerNameRegistry][3].好的,这似乎适合我的场景.
在这个问题中,有一些代码以编程方式配置受信任的颁发者,因此我可以调整为使用ValidatingIssuerNameRegistry,然后我可以使用tokenHandlers Assertion从SAMLP响应中读取,然后提取包括名称(电子邮件)的声明.但是,我从哪里获取指纹和名称从AzureAD元数据传递给它?确切地说,使用这些类而不是自己解析响应的价值是什么?这绝对感觉就像使用图书馆这样做是正确的,但WIF的复杂性以及缺乏关于这样做的漫画文章使得它感觉不合适的东西除了那些身份世界的深处.
我的猜测是,如果我已经在本地存储了证书以验证SAML响应的发布者的身份,并且我在XML中验证签名,那么我可以愉快地使用SAML响应的内容.即用户的身份.尽管如此,手动执行此操作仍然是错误的方法,但如果没有明显的缺点,我也可以.
一些相关的SO问题和文章:
我正在 WIF 中处理 SAML2 令牌,其中包含 EncryptedAssertion。标记不包含“主题标识符密钥”扩展属性,因此 WIF SecurityTokenHandler 在尝试从 LocalMachineStore/Personal 获取正确的 X509 证书时失败。
问题很明显,用于加密令牌的证书不包含 SKI 扩展,当然令牌生成代码 (Java) 似乎并不需要它。为了避免修改生成代码,有没有办法让 WIF SecuityTokenResolver 不检查接收到的 SKI 令牌,而是直接使用本地存储证书来解密令牌?