如何使用 opensaml v3?几乎没有文档,并且 v2 已停产

Posted

技术标签:

【中文标题】如何使用 opensaml v3?几乎没有文档,并且 v2 已停产【英文标题】:How to use opensaml v3? There is little to no documentation and v2 is EOL 【发布时间】:2017-03-26 08:01:27 【问题描述】:

是否有使用 Open SAML 库 v3 的端到端示例?我找不到任何文档,根据https://wiki.shibboleth.net/confluence/display/OpenSAML/Home,v2 已停产。

我正在使用以下代码来获取 SAML 断言-

  private UnmarshallerFactory unmarshallerFactory;
  private DocumentBuilder docBuilder;

  @PostConstruct
  public void init() 

    try 
      InitializationService.initialize();
      DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
      documentBuilderFactory.setNamespaceAware(true);
      docBuilder = documentBuilderFactory.newDocumentBuilder();
      unmarshallerFactory = XMLObjectProviderRegistrySupport.getUnmarshallerFactory();
     catch (Exception e)
      logger.error("Error: ",e);
    
  

  public Assertion getSamlAssertion(String samlResponse)
      throws IOException, XMLParserException, UnmarshallingException, SAXException 

    Document document = docBuilder.parse(new StringInputStream(samlResponse));

    Element element = document.getDocumentElement();
    Unmarshaller unmarshaller = unmarshallerFactory.getUnmarshaller(element);
    XMLObject responseXmlObj = unmarshaller.unmarshall(element);
    Response response = (Response) responseXmlObj;
    return response.getAssertions().get(0);

  

我的 POM-

         <dependency>
            <groupId>org.opensaml</groupId>
            <artifactId>opensaml-core</artifactId>
            <version>3.2.0</version>
        </dependency>


        <dependency>
            <groupId>org.opensaml</groupId>
            <artifactId>opensaml-saml-api</artifactId>
            <version>3.2.0</version>
        </dependency>

问题是我得到 nullunmarshaller 。我已验证 samlResponse 有效

【问题讨论】:

向downvoter-care 解释我可以做些什么来更好地解释这个问题? 我同意,我什至在这个库上都找不到“入门”指南。 【参考方案1】:

你必须在你的 POM 中包含实现。

<dependency>
    <groupId>org.opensaml</groupId>
    <artifactId>opensaml-saml-impl</artifactId>
    <version>3.2.0</version>
</dependency>

在版本 3 中完成的一件事是将库拆分为许多不同的模块。

是的,文档有问题。但据我了解,开发团队意识到了这一点。与此同时,我写了一本关于这个主题的书,A Guide to OpenSAML V3。它介绍了 OpenSAML 的使用和 V3 中的更改。

【讨论】:

不幸的是,该指南仅在您尝试构建 SP 而不是 IdP 时才有用。 是的,抱歉,我认为这是大多数人需要的

以上是关于如何使用 opensaml v3?几乎没有文档,并且 v2 已停产的主要内容,如果未能解决你的问题,请参考以下文章

OpenSAML 使用引导 IV: 安全特性

org.opensaml.common.SAMLRuntimeException:无法获取 SP 签名密钥

如何使用服务帐户通过 .NET C# 访问 Google Analytics API V3?

创建 QName 异常时,Opensaml unmarshallMessage 给出的 opensaml 本地部分不能为“null”

如何使用 Bootstrap v3.4.1 设置禁用(也选中)单选按钮的样式?

OpenSAML / Spring 安全设置,因此在 Tomcat 上重新部署有效