java - 从 Shibboleth IDP 3 MFA 流程中的先前身份验证获取用户属性
问题描述
我正在尝试为 shibboleth idp 3 构建一个双因素身份验证流程。它是使用具有初始 ldap 身份验证的 MFA 流设置的,然后是基于外部身份验证流的我的 2FA 流。
如何从我的 servlet 中的前一个 ldap 流中获取用户数据?似乎 request.getAttribute(ExternalAuthentication.PRINCIPAL_NAME_KEY)
etc. 尚未设置。文档说 LDAP 属性作为身份验证过程的一部分返回并在LDAPResponseContext中公开。如何访问我的 servlet 中的上下文?
我还尝试使用属性解析器从 AD 用户配置文件中释放特定值,但我无法在我的 servlet 中找到这些值。有任何想法吗?
解决方案
我想通了,也许其他人觉得它有帮助:
密码流使用主体名称填充 c14n 上下文,这对我来说已经足够了。要获取 servlet 中的主体名称:
protected void doGet(final HttpServletRequest request, final HttpServletResponse response) throws ServletException {
try {
String authenticationKey = ExternalAuthentication.startExternalAuthentication(request);
// get userPrincipalName of previous authn
final ProfileRequestContext profileRequestContext = ExternalAuthentication.getProfileRequestContext(authenticationKey, request);
final SubjectCanonicalizationContext c14nContext = profileRequestContext.getSubcontext(SubjectCanonicalizationContext.class);
if (c14nContext != null && c14nContext.getPrincipalName() != null) {
usernameShib = c14nContext.getPrincipalName();
//Subject subjectShib = c14nContext.getSubject();
logger.info(usernameShib);
}
//...
}
推荐阅读
- powerbi - 无法注册/登录 Power BI 社区
- c# - 为什么我不能使用 Global.asax.cs 中 Models 文件夹中的类?
- json - 无法将外部结构直接调用到 map[string]struct
- javascript - 如何在 ReactJS 的嵌套状态中使用所有特定键更改值
- c# - 无法将对象的属性绑定到自定义控件
- javascript - 我的代码在 $(document).ready() 函数中不起作用。谁能帮我理解为什么?
- cassandra - apache cassandra 3.11.2 nodetool 清理错误 java.lang.AssertionError: null
- java - 如何在 Java 运行时使用 Spring 执行本机 SQL 查询?
- reactjs - 测试函数返回不同的案例场景 - Jest 酶
- docker - Jenkinsfile 没有使用完整的 docker-compose 命令,丢失 build-arg