从 ADFS 2016 的用户信息端点获取除子属性之外的特定用户信息,例如电子邮件、名字等

从 ADFS 2016 的用户信息端点获取除子属性之外的特定用户信息,例如电子邮件、名字等

我正在尝试使用 ADFS 作为身份提供者并使用 liferay 作为服务提供者来验证用户身份。

为了进行身份验证,我使用 openid connect 作为 SSO,它已经存在于 liferay 7.3.5 CE GA6 中。

我为设置 openid 连接所做的工作:我填写了包含授权、令牌、用户信息端点、jwks_uri、发行者、主题类型和范围的 SSO 表单,其值为 openid、配置文件、电子邮件。

关于发现端点,我留空了。我填写的信息来自***/.well-known/openid-configuration。并且 ADFS 也配置为接受 openid connect。

我遇到的问题:

ERROR [https-jsse-nio-9595-exec-1][status_jsp:861] Unable to map OpenId Connect user to the portal, missing or invalid profile information: {emailAddresss=null, firstName=null, lastName=null}

WARN [https-jsse-nio-9595-exec-1][code_jsp:173] {code="400", msg="", uri=/c/portal/login/openidconnect} javax.servlet.ServletException: java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

据我了解,它没有获得有效的个人资料信息,例如电子邮件、姓名,即使我在范围内包含了个人资料和电子邮件,也导致无法创建用户,然后无法重定向到登录状态页面。

而且正如我在 ADFS 2016 FAQ 中看到的,配置文件和范围不再受支持,这意味着无法调用电子邮件和配置文件的声明。ADFS 2016 FAQ 中还有一篇文章,介绍如何在 ADFS 中自定义自定义 ID 令牌,这需要在 Visual Studio 中实现代码。

我正在寻找一种方法来修复上述错误,或者通过编码在 liferay 中实现 openid 连接的新方法。

相关内容