node 实现SSO
来源:互联网 发布:淘宝1毛钱迅雷会员没了 编辑:程序博客网 时间:2024/06/09 15:51
单点登录,在多个域名环境下,一处登录,多处使用。
大公司都会这样去做,
如淘宝登录了,到了天猫又要登录,啊有点烦。
需要实现a.com 上登录了,b.com上也登录成功了。
访问b.com时就不必再登录了。
b.com 退出了,a.com也退出了。
需要解决的问题是绕过同源策略。
因为a.com是不能向b.com写cookie的。
解决办法,向a.com发起jsonp请求。
a.com 响应后跳转到b.com
b.com执行写入cookie.
并返回jsonp响应。
a.com 页面里接受到回调数据。
在页面发起jsonp请求时,
需要把crossDomain设置成true
在jquery 里在1.5版本后新添加的属性
同域为false 跨域为true
如服务器需要重定向到其他域,需要设置成true.
node 后端写法:
var express=require('express');var path=require('path');var http=require('http');//body中间值在4.X以后分成了子模块var bodyParser = require('body-parser');var cookieParser = require('cookie-parser'); //如果要使用cookie,需要显式包含这个模块var app=express();var port=process.env.PORT || 3001;app.use(bodyParser());app.use(cookieParser());app.use(express.static(path.join(__dirname, 'public')));//设置静态文件夹app.all('*',function(req,res,next){res.header("Access-Control-Allow-Origin", "*");//res.writeHeader(200, {'Content-Type':'application/json'});next();})app.get('/redirect',function(req,res){var call=req.query.callback;res.redirect('http://127.0.0.1:3001/setcookie?call='+call)})app.get('/setcookie',function(req,res){//b域写入cookie//p3p 第三方协议 允许第三方访问b上的cookie//chrome浏览器是支持的,ie需要配置允许。//需要在头配置res.header('P3P',"CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR")var call=req.query.call;res.cookie('userid','id_'+call);res.send(call+'("ok")')})app.get('/getcookie',function(req,res){res.send('getcookie')})app.get('/readercookiejsonp',function(req,res){var call=req.query.callback;var userid=req.cookies.userid;console.log(userid);res.send(call+'("'+userid+'")')})http.createServer(app).listen(port,function(){ console.log('express server listen port'+port);})
以上是代码。
有几个需要注意的地方:
1、需要设置请求允许访问origin
2、重定向时把call传递
3、b.com上在返回头部需配置P3P
默认chrome不配置也可以,但是ie8以下不行。
需要配置,允许第三方访问cookie.
4、b.com上需要接受call 并返回jsonp格式数据。
5、当a.com上需要访问b.com上cookie时,发请jsonp请求。
0 0
- node 实现SSO
- 使用cas实现sso
- SSO实现技术准备
- SSO实现技术
- NTLM SSO的实现
- SSO技术实现机制
- sso简单实现
- SSO实现技术
- 使用CAS实现SSO.
- httpclient 实现sso
- SSO架构与实现
- SSO 实现方案探讨
- 使用CAS实现SSO
- SSO实现方案
- cas实现sso
- 单点SSO实现原理
- SSO-Token,服务器端实现
- java简单实现sso
- 从各大软件公司笔试压轴题学习SQL语句
- 关于iOS多线程,你看我就够了
- Android6.0权限适配
- 老外收集的Atom编辑器最好的一些插件
- swift之类的继承
- node 实现SSO
- JNI编程<二>
- input 输入框下划线
- Spring Aop Aspectj切入点语法详解
- Apache部署django项目
- 单例模式更好的写法
- 好玩的一些APIS for iOS
- web项目中的目录说明
- 互联网企业的核心技术是