JMa*_*sch 5 saml shibboleth single-sign-on saml-2.0
编辑
所以,我想我差不多了.唯一遗漏的是Shibboleth IdP返回一个加密的,瞬态的NameId,我需要它来返回未加密的用户名.如果有人能让我超越这最后一个阻挡者,我会标记答案.
(编辑结束)
我一直在尝试设置Shibboleth 3 IdP(我们的应用程序支持SAML,我们需要一个测试环境).
我的目标是查询LDAP目录以提供身份验证的简单环境.
我设置了Shibboleth IdP 3,它似乎正确地查询AD,但我很难让它返回我请求的属性(uid,名字,姓氏,电子邮件).
我很确定我的问题出在我的attribute-resolver.xml和attribute-filter.xml文件中,但是我没有运气好.
基本上发生的事情是我成功登录(就Shibboleth而言),但是当它将Assertion传递回我的应用程序时,没有任何属性存在.
我尝试将它们添加到Attribute-resolver.xml和attribute-filter.xml,但后来我在idp-warn.log(下面)中出现错误.这是凭据错误.我很确定用户名密码是正确的,因为shibboleth能够验证我(如果错误会失败,不是吗?)所以我的设置肯定会出现其他问题.
我也尝试在断言名称标识符中返回用户名,但我似乎回来的只是一个base-64编码的字符串(解码它产生的字节不能解码回字符串,所以我不确定是什么那里).
在这一点上,我真的可以使用对使用LDAP设置Shibboleth IdP 3的良好操作方法的引用.我一直在网上浏览他们的文档,虽然那里有很多原始数据,但要获得必须完成的所有内容列表才能使其运行起来非常具有挑战性.有什么建议?
这不是完整的答案,而且我没有使用过 shibboleth,但我们在设置 SAML 时遇到了与 NameID 相同的问题。
我相信此页面显示热设置 shibboleth 将发送哪个名称 id:https: //wiki.shibboleth.net/confluence/display/SHIB2/ResolverSAML2NameIDAttributeDefinition
这个答案描述了不同名称方案的含义/sf/answers/1517795261/
不过,我们所做的是在 saml 配置中SAMLAuthenticationProvider添加了 userDetails,并且有一段漂亮的代码,我对此感到非常自豪:
@Override
public Object loadUserBySAML(SAMLCredential credential) throws UsernameNotFoundException {
try {
String login = credential.getAttributeByName("login").getAttributeValues().get(0).getDOM().getFirstChild().getNodeValue();
return loadUserByUsername(login);
} catch (Exception e) {
LOG.error("could not get login name from saml credential", e);
throw new UsernameNotFoundException("Could not load user", e);
}
}
Run Code Online (Sandbox Code Playgroud)
idp 的内容是由第三方处理的,所以我猜是他们将此自定义属性添加到 saml 响应中。我想你可以配置 shibboleth 来做同样的事情。