1)将OpenID Connect身份验证集成到使用Spring Security进行身份验证的Web应用程序中的最佳方法是什么?
2)有没有办法 - 从MITREid方面或Google账户方面 - 让MITREid OpenID Connect身份验证过滤器与Google的OpenID Connect服务一起使用?
我确信这些问题的答案对于使用Spring Security OpenID模块向Google进行身份验证的任何开发人员都很有用.
我的webapp使用Spring Security的OpenID模块(<openid-login .../>)进行身份验证,将Google帐户作为身份提供商.即,用户使用他们的Google Apps或GMail电子邮件地址进行身份验证.
最近,每当用户进行身份验证时,他们都会从Google帐户收到此警告消息:
重要提示:Google帐户的OpenID2将于2015年4月20日消失.
因此,谷歌正在放弃对OpenID的支持,将于2015年4月完全关闭,并声明如果您想通过Google帐户进行身份验证,则必须切换到OpenID Connect协议.
我希望Spring Security能够内置对OpenID Connect的支持,就像它内置了对OpenID的支持一样.例如像<openid-connect-login .../>元素一样的东西.但我的搜索结果却没有得到这样的支持.
我到目前为止找到的最佳候选人是MITREid Connect.它包括一个以OIDCAuthenticationFilterOpenID Connect 命名的Spring Security身份验证过滤器.问题是,它无法与Google的OpenID Connect实施互操作.
我尝试克隆MITREid simple-web-app并将其配置为使用Google帐户进行身份验证(使用OpenID Connect).但它没有用,因为它取决于Google的OpenID Connect实现不支持的随机数.来自Google帐户的错误消息是:
此消息类型不允许使用参数:nonce
接下来,我尝试将自己的MITREid AuthRequestUrlBuilder接口实现插入到MITREid配置中.我的实现和MITREid的实现之间的唯一区别是,我并没有发送随机数.
不发送nonce使得Google的OpenID Connect实现感到满意,但MITREid在Google身份验证响应中找不到nonce时抛出异常.错误消息是:
身份验证失败:ID令牌不包含nonce声明
我在MITREID'中跟踪了MITREid异常到这些行OIDCAuthenticationFilter:
// compare the nonce to our stored claim
String nonce = idClaims.getStringClaim("nonce");
if (Strings.isNullOrEmpty(nonce)) {
logger.error("ID token did not contain …Run Code Online (Sandbox Code Playgroud)