我正在尝试使用 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 连接的新方法。