【发布时间】:2013-01-14 05:24:04
【问题描述】:
我用 Java 实现了一个 SAML SP。
我向 SAML 2.0 IDP 发送 AuthnRequest 并获得加密响应。
我的问题是:
如何确保响应确实来自 IDP 而不是黑客?
验证签名是不够的,因为这只告诉我发件人有一对匹配的私钥/公钥,但它可以是任何人。
因此,我需要 IDP 提前向我提供我上传到 jks 文件的证书,并每次将其与我从响应的 ds:X509Certificate 元素中提取的证书进行比较。
现在,是否有一种标准方法可以将发件人的证书与存储在我的密钥库中的证书进行比较?
我看到了以下代码:
KeyStore keyStore = getKS();
PKIXParameters params = new PKIXParameters(keyStore);
params.setRevocationEnabled(false);
CertPath certPath = certificateFactory.generateCertPath(Arrays.asList(certFromResponse));
CertPathValidator certPathValidator = CertPathValidator.getInstance(CertPathValidator.getDefaultType());
CertPathValidatorResult result = certPathValidator.validate(certPath, params);
够了吗?如果验证没有抛出异常,它会验证发件人的身份吗?
【问题讨论】:
-
您好,您是如何发送请求并获得响应的?我也在尝试实施 SAML SSO
标签: java saml saml-2.0 opensaml