`
GodJohnny
  • 浏览: 94389 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

基于SpringSecurityOAuth2构建SSO

 
阅读更多
参考资料:
  • http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
  • http://projects.spring.io/spring-security-oauth/docs/oauth2.html
  • https://tools.ietf.org/html/rfc6749
  • https://tools.ietf.org/html/rfc6750
  • http://tutorials.jenkov.com/oauth2/index.html
  • http://stackoverflow.com/questions/12296017/how-to-validate-an-oauth-2-0-access-token-for-a-resource-server
  • http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/
  • http://blog.leapoahead.com/2015/09/07/user-authentication-with-jwt/
  • http://www.slideshare.net/rcandidosilva/javaone-2014-securing-restful-resources-with-oauth2


项目背景
   改造一个老的遗留系统,拆分出各个功能模块,以微服务的方式进行整合。根据项目状况,只能将登录系统放在最后进行重构。各个拆分出的微服务模块,需要进行SSO安全校验。为避免存在老系统、SSO服务器两次登录的情况。计划对老的登录系统进行少量的修改,对用户名、口令的验证转给SSO进行登录验证。SSO验证成功后,返回access_token,在向各个微服务请求时,需要带上该token。
方案验证
   之前并未接触过OAuth2.0、Spring Security相关的技术,在查询一些资料,尤其是官方的RFC6749,RFC6750。经过详细阅读后,认为方案理论上是可行的。只是OAuth的授权模式,需要改为Resource Owner Password Credentials或者Client Credentials。而现在绝大部分的demo,介绍都是Authorization Code方式的。另外access_token改为JSON Web Token的方式,可以避免各个微服务频繁地到SSO处进行验证。http://websystique.com/spring-security/secure-spring-rest-api-using-oauth2/中的例子,稍做修改,将TOKEN改为JWT的形式。在微服务中设置jwt的public key与SSO中的public key一致即可。
总结
   在进行demo演示该SSO方案时,花了不少时间。先是了解Spring Security的验证逻辑以及如何验证JSON形式的登录。然后研究OAUTH2.0时,花的时间稍多。现在回头看,首先,需要仔细研究下OAUTH2.0的规范,了解各个名词的准确含义,对理解整个流程规范是很有帮助的。正因为没有准确理解名词的含义、流程规范。浪费不少时间在研究如何用Authorization Code的方式去实现我们的方案上。后来回头又看了看方案,最终才锁定以Password或Client Credentials的形式进行验证。并以此为方向查找相关资料,并最终完成demo。
----------------------------------------------------------------------------
    authorization code流程:
    1、浏览器登录,登录页面A。
    2、Client(即页面A所在的服务器)判断未登录,跳转至Client默认的登录页Login。
    3、重定向至Auth Server的授权页authorize,并附带上client_id=acme&redirect_uri=http://localhost:8080/login&response_type=code&state=CjajQx参数
    4、再次重定向至AuthServer的登录页AuthLogin
    4、登录成功,跳转至授权页authorize,要求确认授权。
    5、确认授权后。返回至Client跳转过来时的页面Login,并返回code,state
    6、如果是初次登录,则Client将再次跳转至用户登录时默认输入的页面A。

    7.1、如果这时,直接访问AuthServer的授权页authorize,则直接弹出确认授权页面,因为已经登录过。
    7.2、如果没有登录过,则跳转至AuthServer的登录页

====================   补充  ========================================
基于Spring boot的OAuth2.0的实现JWT验证的细节备忘
    1、Gradle中添加包引用:
compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.0.10.RELEASE'
compile group: 'org.springframework.security', name: 'spring-security-jwt', version: '1.0.4.RELEASE'
     2、在Spring boot的启动处,添加@EnableResourceServer注解,标识该服务为资源服务器
     3、在application.yml或application.properties中添加public key。如果是YAML格式,需要注意一下公钥的写法。参见:https://symfony.com/doc/current/components/yaml/yaml_format.html

    

分享到:
评论

相关推荐

    基于共享内存的SSO

    【标题】"基于共享内存的SSO"技术是一种在多进程环境下实现单点登录(Single Sign-On,简称SSO)的有效方法。它利用操作系统提供的共享内存机制,使得用户登录信息可以在不同的进程之间共享,从而避免了用户在访问多...

    基于redis的sso接口文档和教程

    **基于Redis的SSO接口文档和教程** 单点登录(Single Sign-On,简称SSO)是一种用户在多个应用系统中只需登录一次,就能在其他所有系统中自由切换并保持登录状态的技术。它简化了用户的登录流程,提高了用户体验。...

    spring security 基于oauth 2.0 实现 sso 单点登录Demo.zip

    spring security 基于oauth 2.0 实现 sso 单点登录Demo 使用 spring security 基于oauth 2.0 实现 sso 单点登录Demo spring boot + spring security + spring security oauth

    基于JWT实现SSO单点登录流程图解

    基于JWT实现SSO单点登录流程图解 基于JWT实现SSO单点登录流程图解是指使用JSON Web Token(JWT)来实现单点登录(SSO)的机制。在这种机制中,用户只需要登录一次,就可以访问多个应用服务器上的资源,而不需要再次...

    基于PHP的baigo SSO单点登录系统 php版.zip

    2. **应用客户端**:集成到各个需要SSO功能的独立应用中,用于识别和转发会话令牌。 3. **安全协议**:如SAML(Security Assertion Markup Language)或OAuth,用于在认证服务器和客户端之间安全地交换信息。 4. **...

    Node.js-基于NodeExpress的SSO单点登录实践

    2. **重定向逻辑**:当用户访问子应用时,如果尚未登录,会被重定向到SSO认证中心。认证中心验证令牌有效后,会跳转回子应用,并附带一个标识已验证的参数。 3. **安全性**:确保所有通信过程使用HTTPS,以防止中间...

    基于oauth2+security实现的SSO单点登录案例

    总的来说,通过实践这个基于Spring Security OAuth2的SSO单点登录案例,你将能够掌握如何在分布式系统中构建安全的单点登录系统,这对于任何需要统一用户管理的大型企业或平台都是非常有价值的。

    java 基于 Cookie 的 SSO 中间件 kisso 低代码

    Kisso是一个基于Cookie的轻量级SSO中间件,它简化了SSO的实施过程,尤其是对于那些不熟悉复杂认证流程的开发者来说,Kisso的低代码特性使其变得更加友好。 Kisso的工作原理大致如下: 1. 用户首次访问系统A时,...

    SpringMvc 基于 kisso 实现的 sso 演示 demo代码完整版

    SpringMvc 基于 kisso 的 sso 演示 demo # 登录退出 ``` 1、启动 输入 http://localhost:8080/login 用户 kisso 密码 123 2、登录成功查看浏览器发现 kisso cookie 骚年你成功集成 kisso 了!! 3、退出访问 ...

    基于SAML 2.0 SSO单点登录

    基于SAML 2.0 SSO单点登录,包括VS2005,VS2008,VS2010。有部分Java代码。含文档。 client发送saml请求---sso响应验证client是否可信任---可信响应saml----加密saml---发送到client---client解密成功--验证信息...

    基于Java Cookie的SSO中间件kisso设计源码及低代码组件库

    本项目提供基于Java的Cookie单点登录(SSO)中间件kisso的源码和低代码组件库,涵盖146个文件,主要包括130个Java源代码文件、2个Markdown文档、2个Gradle构建脚本、2个属性文件以及相关配置和管理文件。该中间件...

    基于PHP的sso实例

    通过以上内容,我们可以了解到基于PHP实现SSO的基本思路和关键技术,这为构建高效、便捷且安全的企业级多系统登录提供了可能。在实际开发中,我们需要根据具体需求进行相应的调整和优化,以满足不同场景的应用。

    SSO单点登入,使用cookie实习(Struts2)

    通过以上步骤,我们可以利用Struts2的灵活性和可扩展性,构建一个基于Cookie的SSO系统。值得注意的是,实际开发中可能还需要根据具体需求和安全策略进行调整,例如集成其他的认证协议如OAuth2或OpenID Connect,以及...

    sso 单点登录例子

    2. SSO的实现方式: - **基于Cookie的SSO**:最常见的实现方式,通过设置共享的Cookie在各个应用之间传递登录状态。当用户登录一个应用时,会在所有关联应用中设置相同的Session ID,从而实现跨应用的身份验证。 -...

    java二次开发源码下载-identity-agent-sso:身份代理sso

    您可以从以下位置下载预先构建的 SampleApp.war 运行示例应用程序 为了使用 SAML2 检查 SSO,请按照以下步骤操作 启动 WSO2 IS。 访问 WSO2 IS 管理控制台并创建服务提供者(例如:- sampleApp) 对于服务提供商,在...

    基于SpringBoot和OAuth2的SSO单点登录与权限认证设计源码

    该源码项目为基于SpringBoot框架和OAuth2协议的SSO单点登录与权限认证解决方案,采用Java语言开发,并集成了JavaScript、CSS、HTML等多种前端技术。项目结构包含667个文件,其中涉及164个less文件、164个js文件、126...

    sso server端

    - OpenID Connect:基于OAuth 2.0的协议,提供简单的身份验证层,适合构建SSO服务器。 4. 跨域支持: - CORS(Cross-Origin Resource Sharing):为了让浏览器允许来自不同源的请求,SSO服务器需要配置CORS策略,...

    SpringSecurity+OAuth2+SSO.pptx

    浏览器的单点登录,基于session的或者是基于app的基于token的,app类似SPA方式,但是有个不同点,就是在多个app或者多个SPA下怎么做单点登录。一开始以为很容易。但是在搞一段时间啊后发现自己越走越黑,越走越远,...

    C#单点登陆组件源码SSO

    本项目提供了一款基于C#编写的SSO组件源码,其设计思路类似于微软的认证服务器和Web应用服务器,能够实现跨域和跨服务器的身份验证。 首先,理解C#中的SSO实现原理至关重要。SSO的核心在于票据(Ticket)的概念,当...

Global site tag (gtag.js) - Google Analytics