在我目前的项目中,我在全范围内使用Spring Security OAuth(http://projects.spring.io/spring-security-oauth/)项目来保护我们的资源(Web API)。到目前为止一切正常。
我现在致力于客户端的开发,并且我正在寻找对身份验证方案的良好支持(因为OAuth是一种授权协议)。经过漫长而长时间的互联网搜索,我确信我应该采用OpenID Connect(http://openid.net/connect/)来满足此要求,因为它是" OAuth 2.0和#34之上的简单身份层; (但我知道,在安全主题的情况下,没有"简单"
可悲但真实的我无法在Spring Security中找到任何有关OpenID Connect支持的好资源(不要与" pure" OpenID混淆)。在https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server有一个OpenID Connect参考实现,但是我已经期望在Spring Security中直接使用类似的东西,并提供全面的文档等等。我在这里找到了大约2年的讨论https://github.com/spring-projects/spring-security-oauth/issues/220,但现状是什么?寻找" Spring Open Connect"的Spring Security支持不提供任何有形的"结果。
在Spring Security的帮助下,您是否有关于实施OpenID Connect的任何信息,文档和/或经验?
答案 0 :(得分:3)
在OpenID Connect出现之前,假设请求参数response_type
的值为code
(对于authorization code flow)或token
几乎是可以的(对于implicit flow)。但是,现在授权服务器实现必须能够处理(code
,token
,id_token
)和none
的任意组合。详细信息在" OpenID Connect Core 1.0, 3. Authentication"和" OAuth 2.0 Multiple Response Type Encoding Practices"。
作为支持OpenID Connect的第一步,Spring Security OAuth必须变得灵活response_type
。您可以在" Issue 619: Handling additional response_types"找到请求。但是,很难将只需要code
或token
的现有代码更改为一次可以接受多个值的新代码。截至撰写本文时,2015年12月12日Issue 619的最新评论以下面摘录的句子结束。
任何评论都非常受欢迎,因为事实证明(正如我预测的那样)一个大型的重构练习。
如果Spring Security OAuth纯粹是一个没有商业机构支持的自愿项目,那么这种大变化就不太可能发生。
我的经验:大约两年前,我从头开始编写了一个OAuth 2.0服务器。之后就知道了OpenID Connect的存在。在阅读了与OpenID Connect相关的规范后,我终于得出结论,转储现有的实现并再次从头开始重新编写服务器。
正如您所猜测的,OpenID Connect并不简单。
另见" 5。响应类型" in " Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings"
<小时/> 更新(2017年11月23日)
Spring Framework上的授权服务器和OpenID提供程序
https://github.com/authlete/spring-oauth-server
Spring Framework上的资源服务器
https://github.com/authlete/spring-resource-server
spring-oauth-server 支持OAuth 2.0和OpenID Connect。 spring-resource-server 具有UserInfo Endpoint的实现,该实现在&#34; OpenID Connect 1.0,5.3. UserInfo Endpoint&#34; 中定义。两种实现都不使用Spring Security OAuth,但使用Spring Boot和Authlete。