Spring Security OAuth2实现的SSO

一.介绍

最常见的例子是,我们打开淘宝APP,首页就会有天猫、聚划算等服务的链接,当你点击以后就直接跳过去了,并没有让你再登录一次。

Java技术栈里,SSO的解决方案有CAS、OAuth2等,本文主要介绍Spring Cloud项目里如何使用Spring Security OAuth2实现的SSO。

二.实现步骤

下面这个图是我再网上找的,我觉得画得比较明白:

 

步骤:

1.浏览器向UI服务器点击触发要求安全认证

2.跳转到授权服务器获取授权许可码

3.从授权服务器带授权许可码跳回来

4.UI服务器向授权服务器获取AccessToken

5.返回AccessToken到UI服务器

6.发出/resource请求到UI服务器

7.UI服务器将/resource请求转发到Resource服务器

8.Resource服务器要求安全验证,于是直接从授权服务器获取认证授权信息进行判断后(最后会响应给UI服务器,UI服务器再响应给浏览中器)

 

三.CMP中使用OAuth2实现的SSO

说明:

1.跨域问题

背景:为了更好的做业务分层,经常会将前后端代码分离开来,发布在不同的服务器上,此时,便会遇到跨域的问题。浏览器默认会向后端发送一个Options方式的请求,根据后端的响应来判断后端支持哪些请求方式,支持才会真正的发送请求。

以往的解决方案:

以前要实现跨域访问,可以通过JSONP、Flash或者服务器中转的方式来实现,但是现在我们有了CORS。

CORS与JSONP相比,无疑更为先进、方便和可靠。

    a、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。

    b、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。

    c、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS(这部分会在后文浏览器支持部分介绍)。

 

2.CORS介绍

CORS(Cross-Origin Resource Sharing 跨源资源共享),网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。

当一个请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。

在日常的项目开发时会不可避免的需要进行跨域操作,而在实际进行跨域请求时,经常会遇到类似 No 'Access-Control-Allow-Origin' header is present on the requested resource.这样的报错。

这样的错误,一般是由于CORS跨域验证机制设置不正确导致的。

 

3.解决方案

在过滤链中加入CorsFilter设置相关请求头。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值