java - SAML - 解析服务提供商元数据并提取详细信息,例如签名证书和断言消费者端点

标签 java saml-2.0 service-provider

我的应用程序充当 SAML IdP。为此,我正在使用我的应用程序注册服务提供商。为此,我连接到 SP 联合元数据 URL 并下载 XML。

问题是 - 是否有任何现成的 java 库可以执行此任务?或者我是否需要使用标准 DOM API 手动提取详细信息?

注意:我的应用程序维护用户存储库及其身份验证和授权详细信息,例如凭据、角色、操作等。 因此不能真正依赖第三方 IdP,例如 ADFS 或 OneLogin。

非常感谢任何帮助。

最佳答案

感谢 codebrane 的指点。我已经找到了使用 opensaml 库的方法。

 private void init(String metadata) throws Exception {
       // parse metadata XML
        EntityDescriptorImpl entityDescriptor = parseMetaData(metadata);

        SPSSODescriptor spssoDescriptor = entityDescriptor.getSPSSODescriptor(SAMLConstants.SAML20P_NS);

        // get signing/encryption certificates
        List<KeyDescriptor> keyDescriptors = spssoDescriptor.getKeyDescriptors();
        for (KeyDescriptor keyDescriptor: keyDescriptors) {
            KeyInfo keyInfo = keyDescriptor.getKeyInfo();
            X509Certificate samlCertificate = keyInfo.getX509Datas().get(0).getX509Certificates().get(0);
            sigVerificationCertificate = KeyInfoSupport.getCertificate(samlCertificate);
        }

        // get SAML endpoints
        assertionConsumerServices = spssoDescriptor.getAssertionConsumerServices();
        singleLogoutServices = spssoDescriptor.getSingleLogoutServices();

        // TODO - extract organization name etc.
    }

关于java - SAML - 解析服务提供商元数据并提取详细信息,例如签名证书和断言消费者端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60273928/

相关文章:

laravel - 使用服务提供商的中间件获取覆盖的配置

certificate - SAML 签名证书 - CA 签名与自签名

node.js - 如何从头开始创建使用 API 进行身份验证的 SAML IDP

java - 从 android webview 打开视频播放器而不是在常规 <a> 上打开它

java - 我想替换以 # 开头的字符串中的内容,如果它以 !# 开头,则必须跳过它

Java 8 LocalDate 映射与 mybatis

java - 有没有办法使 PrintWriter 输出为 UNIX 格式?

java - 单一注销不适用于 Shibboleth IdP

c# - 我应该如何在 ASP.NET MVC 4 服务提供商中实现 SAMLP 2.0?

single-sign-on - 选择什么 entityId 来配置 shibboleth 中的服务提供商 (SP)?