标签: opensaml

初始化 OpenSaml 时出现 java.lang.NoSuchMethodError: org.slf4j.helpers.Util.report(Ljava/lang/String;)V

我在我的 Maven 项目中使用 OpenSaml。当我尝试使用 DefaultBootstrap 类的变体初始化 OpenSaml 时,我得到以下堆栈跟踪:

    java.lang.NoSuchMethodError: org.slf4j.helpers.Util.report(Ljava/lang/String;)V
    org.apache.log4j.Log4jLoggerFactory.<clinit>(Log4jLoggerFactory.java:47)
    org.apache.log4j.LogManager.getLogger(LogManager.java:42)
    org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73)
    org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
    org.opensaml.xml.XMLConfigurator.<init>(XMLConfigurator.java:56)
    org.opensaml.xml.XMLConfigurator.<init>(XMLConfigurator.java:73)
Run Code Online (Sandbox Code Playgroud)

我尝试执行 mvn dependency:tree 来找出从何处加载 SLF4J jar 的不匹配版本。我还尝试在 mvn.bat 中将 -verbose 选项传递给 Java。这些选择都没有帮助。我尝试一一删除 pom.xml 中的依赖项。再次,没有运气。如果有人可以阐明如何找到罪魁祸首罐子或如何解决此错误,我将不胜感激。

java slf4j nosuchmethoderror opensaml

1
推荐指数
1
解决办法
8022
查看次数

SAML 2.0 身份验证请求的目的/用途是什么?

我已经浏览了类似的问题并阅读了几篇有关 SAML 2.0 的文章,但我仍然无法理解 SAML Auth Request。

我已经实施了多个基于 SAML 的 SSO 解决方案,其中我的公司是 IdP(身份提供商)。我们一直通过 SAML 响应将用户从我们的网站发送给第三方:

  1. 用户登录我们的网站。
  2. 用户单击我们网站上的特殊链接。
  3. 我们准备 SAML 响应 XML。
  4. 我们用我们的私钥对其进行电子签名。
  5. 将其作为 HTML 表单中的隐藏字段以及“RelayState”参数发送回用户的浏览器。
  6. 我们会自动将此表单发布到 SP(服务提供商)URL。

就是这样。

SAML 2.0 文章(例如,维基百科关于 SAML 2.0 的概述文章)表明我们缺少一个步骤:“SAML Auth Request”。看来 SP 需要通过首先向 IdP(我们)发送“SAML 身份验证请求”来启动 SSO,然后我们应该使用 SAML 响应来响应它。

SP 如何决定何时发起 SSO?SP 甚至不知道我们将按照他们的方式发送用户。用户当前已登录我们的网站,由用户决定何时单击该链接,这将“神奇地”在 SP 网站中对他们进行身份验证。

谢谢你!

PS 我知道 SAML 2.0 是“既定的行业标准”,但我使用它的次数越多,我就越觉得它有点矫枉过正。由于其复杂性,存在大量不同的不兼容的实现(根据我的经验)。每次我们与新合作伙伴进行 SSO 时,这都是一种痛苦。大公司通过销售“开箱即用”的 SAML 解决方案赚了一大笔钱,但没有人知道如何正确配置和排除故障,因此人们几乎被迫支付昂贵的承包商费用来完成所有设置。公司希望能够雇用低工资员工来支持那些过于复杂的 SAML 解决方案。当与第三方设置 SSO 时,我经常与那些不知道它是什么的人打交道,他们只是接受过单击按钮并通过电话向我阅读神秘错误消息的培训。这都是由于 SAML 被过度设计造成的。但是,嘿 - 有一个光明的一面:我得到了很好的报酬,因为我对 SAML 足够了解,至少可以让它发挥作用。:)

single-sign-on opensaml saml-2.0

1
推荐指数
1
解决办法
3487
查看次数

opensaml java 加密断言 - 无法使用 EncryptedKeyResolver 解密 EncryptedData

我已经在 okta 上设置了一个开发人员帐户,并且正在尝试从我在那里设置的测试应用程序中解密加密的断言。所以我的本地 java Spring 应用程序有一个控制器正在接收 SAML 断言的 HTTP POST - 我已经验证了这一点,它没有被加密。现在打开加密后,我尝试用以下方法解密它:

private Assertion decrypt(EncryptedAssertion encryptedAssertion) {//throws DecryptionException, KeyStoreException, NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableEntryException {
    StaticKeyInfoCredentialResolver keyInfoCredentialResolver = new StaticKeyInfoCredentialResolver(spConfig.getCredential());
    Decrypter decrypter = new Decrypter(null, keyInfoCredentialResolver, new InlineEncryptedKeyResolver());
    decrypter.setRootInNewDocument(true);
    try {
        return decrypter.decrypt(encryptedAssertion);
    } catch (Exception e) {
        log.debug("oops", e.getCause());
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此 SP 配置代码:

private static final String KEY_STORE_PASSWORD = "mypassw";
private static final String KEY_STORE_ENTRY_PASSWORD = "mypassw";
private static final String KEY_STORE_PATH = "/keystore.p12";
private static final …
Run Code Online (Sandbox Code Playgroud)

java spring saml opensaml okta

1
推荐指数
1
解决办法
2980
查看次数

如何发送SAML请求?

我想向我的IDP(Azure AD)发送SAML请求,但是我不确定如何发送请求。

首先,我使用OpenSAML来构建AuthRequest。我将其编码为字符串。

现在,我想使用ApacheHttpClient发送请求并读取响应,而且我不确定OpenSAML是否提供了HTTP发送方法,因此我的想法是暂时使用Apaches HttpClient。

String encodedAuthRequest = generateAuthRequest();
String url = "http://myidp/samlendpoint";
CloseableHttpClient client = HttpClientBuilder.create().build();
HttpGet request = new HttpGet(url);

// add request header
request.addHeader("User-Agent", USER_AGENT);

// what is to add else?

HttpResponse response = client.execute(request);
Run Code Online (Sandbox Code Playgroud)

我现在陷入困境,因为我不确定如何设置请求,它是否需要像?saml=....GET中一样的查询参数,还是必须将编码的saml响应作为POST放在正文中。

有人可以帮助或澄清这些问题吗?

来自纪尧姆斯的更新答案:

我有来自IDPs MetaData的信息:

<IDPSSODescriptor>
    <SingleSignOnService
        Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
        Location="https://myidp/saml2" />
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
        Location="https://myidp/saml2" />
Run Code Online (Sandbox Code Playgroud)

java http azure opensaml saml-2.0

0
推荐指数
1
解决办法
7370
查看次数