Websphere Application Server SAML 令牌处理
Websphere Application Server SAML Token processing
我能够成功设置 websphere 以使用 IdP 进行身份验证并按预期访问 Web 资源。但是现在我的应用程序需要 SAML token/response 中可用的 claims/assertions/attributes 才能继续进行。在我的 java 应用程序中访问 SAML response/attributes 的最佳选项是什么?
对于 WebSphere Liberty 配置文件:
从 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();
}
您可以从 Saml20Token
获取 com.ibm.websphere.security.saml2.Saml20Attribute 列表
samlToken.getSAMLAttributes();
您还可以从 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();
我想添加到之前的 answer.For Websphere Application Server,如果您正在使用已经可用的 WebsphereSamlSP 应用程序作为 SP,那么您可以在 handleRedirect()
方法中使用以下代码 IBMWebpshereSamlACSListenerServlet
获取 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]);
}
}
}
}
我能够成功设置 websphere 以使用 IdP 进行身份验证并按预期访问 Web 资源。但是现在我的应用程序需要 SAML token/response 中可用的 claims/assertions/attributes 才能继续进行。在我的 java 应用程序中访问 SAML response/attributes 的最佳选项是什么?
对于 WebSphere Liberty 配置文件:
从 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(); }
您可以从 Saml20Token
获取 com.ibm.websphere.security.saml2.Saml20Attribute 列表samlToken.getSAMLAttributes();
您还可以从 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();
我想添加到之前的 answer.For Websphere Application Server,如果您正在使用已经可用的 WebsphereSamlSP 应用程序作为 SP,那么您可以在 handleRedirect()
方法中使用以下代码 IBMWebpshereSamlACSListenerServlet
获取 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]);
}
}
}
}