【问题标题】:Websphere Application Server SAML Token processingWebsphere 应用服务器 SAML 令牌处理
【发布时间】:2016-01-19 21:50:48
【问题描述】:

我能够成功设置 websphere 以通过 IdP 进行身份验证并按预期访问 Web 资源。但现在我的应用程序需要 SAML 令牌/响应中可用的声明/断言/属性才能继续进行。在我的 java 应用程序中访问 SAML 响应/属性的最佳选择是什么?

【问题讨论】:

    标签: java websphere saml websphere-7 websphere-8


    【解决方案1】:

    我想补充上一个答案。对于 Websphere Application Server,如果您使用已经可用的 WebsphereSamlSP 应用程序作为 SP,那么您可以在 IBMWebpshereSamlACSListenerServlethandleRedirect() 方法中使用以下代码来获取 saml 属性。或者在您的自定义 SP 代码中使用它。

    SAMLToken samlToken = (SAMLToken) AccessController
                            .doPrivileged(new java.security.PrivilegedExceptionAction() {
                                public Object run() throws java.lang.Exception {
                                    final java.util.Iterator authIterator = subject
                                            .getPrivateCredentials(SAMLToken.class)
                                            .iterator();
                                    if (authIterator.hasNext()) {
                                        final SAMLToken token = (SAMLToken) authIterator
                                                .next();
                                        return token;
                                    }
                                    return null;
                                }
                            });
                // Log attribute name and values
                    List<SAMLAttribute> attributes = samlToken.getSAMLAttributes();
                    if (attributes != null && !attributes.isEmpty()) {
                        for (SAMLAttribute attr : attributes) {
                            logger.debug(attr.getName());
                            if (attr.getStringAttributeValue() != null) {
                                for (int i = 0; i < attr.getStringAttributeValue().length; i++) {
                                    logger.debug(attr.getStringAttributeValue()[i]);
                                }
    
                            }
                        }
                    }
    

    【讨论】:

      【解决方案2】:

      对于 WebSphere Liberty 配置文件:

      1. 从 RunAsSubject 获取 com.ibm.websphere.security.saml2.Saml20Token:

        Saml20Token samlToken = null;
        Subject subject = WSSubject.getRunAsSubject();
        Iterator authIterator = subject.getPrivateCredentials(Saml20Token.class).iterator();
        if (authIterator.hasNext()) {
            samlToken = (Saml20Token) authIterator.next();
        }
        
      2. 您可以从 Saml20Token 获取 com.ibm.websphere.security.saml2.Saml20Attribute 列表

        samlToken.getSAMLAttributes();

      3. 您还可以从 Saml20Token 获取大多数 SAML 断言。例如 samlToken.getSAMLIssuerName();

      对于经典 WebSphere:

          Subject subject = WSSubject.getRunAsSubject();
          SAMLToken samlToken = (SAMLToken) AccessController.doPrivileged(
                      new java.security.PrivilegedExceptionAction() {
                          public Object run() throws java.lang.Exception
                          {
                              final java.util.Iterator authIterator = subject.getPrivateCredentials(SAMLToken.class).iterator();
                              if ( authIterator.hasNext() ) {
                                  final SAMLToken token = (SAMLToken) authIterator.next();
                                  return token;
                              }
                              return null;
                          }
                      });
                         SAMLNameID = samlToken.getSAMLNameID();
          List<SAMLAttribute>  attributes = samlToken.getSAMLAttributes();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-30
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-16
        • 1970-01-01
        相关资源
        最近更新 更多