成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

什么是單點登錄系統?用nodejs怎么實現?

什么是單點登錄系統?用nodejs怎么實現?下面本篇文章給大家介紹一下使用node實現單點登錄系統的方法,希望對大家有所幫助!

什么是單點登錄系統?用nodejs怎么實現?

單點登錄SSO(Single Sign On),就是把2個及以上的業務系統中的登錄功能剝離出來,形成一個新的系統,做到一次登錄后在任意的業務系統中都無需登錄的效果。

一. 基礎知識

1.1 同源策略

源 = 協議 + 域名 +端口

以http://www.a.com為例:

  • https://www.a.com ❌(協議不同)
  • http://www.b.com ❌(域名不同)
  • http://www.a.com:3000 ❌(端口不同)

同源策略是瀏覽器的行為,它通過確保應用下的資源只能被本應用訪問,來保證安全。

1.2 會話機制

由于http協議是無狀態協議(客戶端和服務器端數據交換完畢,會關閉連接,下次請求重新建立連接),但我們需要做記住密碼等功能時,很明顯需要將會話記錄下來。【相關教程推薦:nodejs視頻教程】

常用的會話跟蹤就是cookie和session,簡單的理解它們就是可以存放key,value的數據結構,區別在于cookie保存在客戶端,session保存在服務器端。

二. 單點登錄

1. 同父域SSO

同父域,如www.app1.aaa.com,www.app2.aaa.com這兩個服務器都是在.aaa.com的父域名。
默認情況下,兩個服務器下頁面之間的cookie是互相訪問不到的。

但是我們可以通過設置cookie的domain屬性為共通的父域名,使得兩個服務器下頁面之間的cookie可以相互訪問到。

router.get('/createCookie', async (ctx, next) => {   ctx.cookies.set('username', '123', {     maxAge: 60 * 60 * 1000,     httpOnly: false,     path: '/',     domain:'.a.com' //設置domain為共通的父域名   });   ctx.body = "create cookie ok"})router.get('/getCookie', async (ctx, next) => {   let username=ctx.cookies.get('username')   if (username){     ctx.body=username  }else{     ctx.body='no cookie'   }})
登錄后復制

什么是單點登錄系統?用nodejs怎么實現?

2. 跨域SSO

當我們的域名為www.a.com,www.b.com時,無論怎樣設置domain都沒用了。

那么就要想辦法將身份憑證(token)寫入到所有域的cookie中

2.1 跨域寫cookie
2.1.1 利用< script />標簽跨域寫cookie(jsonp)

在http://www.a.com/index.js中直接向https://www.c.com:3000/sso直接發送網絡請求,是無法跨域寫入cookie的。

  <script>     $.ajax({       url: 'https://www.c.com:3000/sso?key=username&value=123',       method: 'get',     })   </script>
登錄后復制

但是我們可以通過< script />標簽發起跨域請求,寫入cookie

<script src="https://www.c.com:3000/sso?key=username&value=123"></script>
登錄后復制

或者使用jquery jsonp的方式發起跨域請求,寫入cookie,這種方式的原理也是通過< script />標簽能夠跨域實現的。

 $.ajax({       url: 'https://www.c.com:3000/sso?key=username&value=123',       method: 'get',       dataType:'jsonp'     })
登錄后復制

這樣通過< script />標簽就實現了往www.a.com中寫入了domain為www.c.com的跨域cookie.
什么是單點登錄系統?用nodejs怎么實現?
后端

const options = {   key: fs.readFileSync(path.join(__dirname, './https/privatekey.pem')),   cert: fs.readFileSync(path.join(__dirname, './https/certificate.pem')),   secureOptions: 'TLSv1_2_method' //force TLS version 1.2}var server = https.createServer(options,app.callback());  //只能使用https協議寫cookierouter.get('/sso', async (ctx, next) => {   let {     key, value  } = ctx.request.query   ctx.cookies.set(key, value, {     maxAge: 60 * 60 * 1000, //有效時間,單位毫秒     httpOnly: false, //表示 cookie 是否僅通過 HTTP(S) 發送,, 且不提供給客戶端 JavaScript (默認為 true).     path: '/',     sameSite: 'none', //限制第三方 Cookie     secure: true //cookie是否僅通過 HTTPS 發送   });   ctx.body = 'create Cookie ok'})
登錄后復制

注意:

  • 瀏覽器未寫入cookie報錯his set-cookie was blocked due to http-only
    http-only:表示 cookie 是否僅通過 HTTP(S) 發送,, 且不提供給客戶端 JavaScript (默認為 true).
    所以要將httpOnly設置為false.

  • 瀏覽器未寫入cookie報錯this set-cookie was blocked due to user preference
    這個真的坑,因為我是無痕模式打開的瀏覽器,但是chrome瀏覽器默認無痕模式下禁用第三方cookie,修改為允許所有cookie就行了.
    什么是單點登錄系統?用nodejs怎么實現?

  • 瀏覽器未寫入cookie報錯this set cookie was blocked because it has the SameSite attribute but Secure not set
    需要設置sameSite和secure屬性

  • 瀏覽器未寫入cookie報錯server error Error: Cannot send secure cookie over unencrypted connection
    這個我覺得是koa框架寫cookie的限制吧,它只能支持https寫cookie…,于是我把www.c.com改為了https服務器.

2.1.2 p3p協議頭實現IE瀏覽器跨域

上面說的jsonp的方式在chrome瀏覽器中完美運行,但是IE瀏覽器對于cookie更加嚴格,只用上面方式無法寫入cookie,解決辦法就是加上p3p的響應頭。

router.get('/sso', async (ctx, next) => {   let {     key, value  } = ctx.request.query   ctx.cookies.set(key, value, {     maxAge: 60 * 60 * 1000, //有效時間,單位毫秒     httpOnly: false,     path: '/',     sameSite: 'none',     secure: true   });   ctx.set("P3P", "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'") //p3p響應頭   ctx.body = 'create Cookie ok'})
登錄后復制

2.1.3 url參數實現跨域信息傳遞

訪問http://www.c.com:3000/createToken?from=http://www.a.com/createCookie

www.c.com上生成token后將url重寫,帶上token,重定向到www.a.com

router.get('/createToken', async (ctx, next) => {   let { from } = ctx.request.query  let token = "123";   ctx.response.redirect(`${from}?token=${token}`)})
登錄后復制

www.a.com上從url上獲取token,存入cookie

router.get('/createCookie', async (ctx, next) => {   let { token } = ctx.request.query   ctx.cookies.set('token', token, {     maxAge: 60 * 60 * 1000, //有效時間,單位毫秒     httpOnly: false,     path: '/',   });   ctx.body = 'set cookie ok'})
登錄后復制

這樣就實現了跨域信息的傳遞.與上面的方式不同,這種方法只是單純的http請求,適用于所有瀏覽器,但是缺點也很明顯,每次只能分享給一個服務器。
什么是單點登錄系統?用nodejs怎么實現?

2.2 跨域讀cookie
2.2.1 利用< script />標簽跨域讀cookie(jsonp)

之前2.1.1利用< script />標簽在www.a.com中寫入了www.c.com的cookie(username,123),現在想要www.a.com請求的時候攜帶上www.c.com的cookie,也就是說要跨域讀cookie.

其實也是同樣的方法,在www.a.com上利用< script />跨域訪問訪問www.c.com,會自動的帶上domain為www.c.com的cookie。
www.a.com/index.js

<script src="https://www.c.com:3000/readCookie"></script>
登錄后復制

www.c.com

router.get('/readCookie', async (ctx, next) => {   let username = ctx.cookies.get('username')   console.log('cookie', username)})
登錄后復制

什么是單點登錄系統?用nodejs怎么實現?
可以看到讀取到了存儲在www.a.com里面domain為www.c.com的cookie.

3. nodejs實現單點登錄系統實戰

什么是單點登錄系統?用nodejs怎么實現?
效果如圖所示:

  • 第一次訪問www.a.com首頁

  • 跳轉到www.c.com:3000登錄頁面,登錄成功后跳轉www.a.com首頁

  • 再次訪問www.a.com首頁,無需登錄直接跳轉

  • 訪問www.b.com首頁,無需登錄直接跳轉

源碼: https://github.com/wantao666/sso-nodejs

詳細設計:
什么是單點登錄系統?用nodejs怎么實現?

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
人人妻人人澡人人爽人人精品图片| 毛片一区二区三区| 久久久久久精品免费免费WE| 久久天天躁夜夜躁狠狠2018| 妺妺窝人体色聚窝窝www偷窥 | 亚洲乱码中文字幕久久孕妇黑人| 亚洲午夜性春猛交ⅩXXX| 2020久久国产综合精品SWA| 按摩男让我高潮做了3次正常吗| 东京无码熟妇人妻AV在线网址 | 国产69精品久久久久久妇女迅雷| 国产区在线观看成人精品| 久久国产午夜精品理论片| 男女啪啪高潮无遮挡免费| 日日狠狠久久偷偷色综合免费| 无码任你躁久久久久久| 亚洲无码视频一区二区| AV天堂精品久久久久2| 国产CHINESE男男GAY| 狠狠亚洲婷婷综合色香五月| 看黄A大片爽爽爽不打码| 人妻蜜と1~4中文字幕月野定规| 玩弄三个高大的熟妇赶尸艳谈| 亚洲乱色熟女一区二区三区麻豆| 亚洲中文字幕无码一区无广告 | 欧美成人精品三级又大又粗 | 欧美性猛交XXX嘿人猛交| 糖心旗袍茶艺老师NANA的背景| 亚洲AV无码丰满尖叫高潮| 中文弹幕日产无线码一区| 亚洲AV蜜桃少妇秘 大胸| 国产精品无码综合区| 久久99精品国产99久久6| 夜夜躁狠狠躁日日躁孕妇| 婷婷丁香六月激情综合啪| 久久久无码精品亚洲日韩蜜臀浪潮| 色妞色视频一区二区三区四区| 国内精品久久人妻无码| 99久久亚洲综合精品成人| 丰满人妻被黑人中出849| 巴西FREE性VIDEO极品| 91人妻人人澡人人爽人人| 岳故意装睡让我挺进去观看| 成在人线AV无码免费看网站直播| 狠狠色丁香婷婷综合久久图片| 女人偷拍厕所69XXXXXWW| 无码国产玉足脚交久久2020 | 精品一区二区三区在线观看视频| 欧美国产日本高清不卡| 小寡妇高潮喷水了| 99品一二三产区区别| 国产成人AV综合亚洲色欲| 精品亚洲国产成人蜜臀优播AV| 欧美黑人巨大video粗暴| 先锋中文字幕在线资源| 少妇夜夜爽夜夜春夜夜高潮| 成人欧美一区二区三区1314| 久久AV无码AV高潮AV| 中文字幕欧美人妻精品一区| 亚洲精品国产AⅤ成拍色拍| 中文字幕乱妇无码AV在线| 美女露 0裸体无挡视频| 精品一区二区三区AV天堂| 亚洲AV永久无码精品久久麻豆| 亚洲欧美在线人成最新| 中国人妻XXXXX免费看| 国产精品久久久久久婷婷| 免费无码又爽又刺激动态图| 小雪尝禁果又粗又大的中国地图| MM1313亚洲国产精品无码| 铜铜铜铜铜铜铜铜好大好深黄| 亚洲一区蜜桃视频在线| 国产AV大陆精品一区二区三区| 免费看高清大片的APP在线看| 亚洲AV无码成人网站在线观看| 成人免费无码H在线观看不卡| 波多野结衣在线播放| 久久精品国产自清天天线| 乌克兰少妇XXXX做受野外| FREEXXXX国产HD中文对白| 久久久久久精品久久久| 性生交大片免费看淑女出招| 成人无号精品一区二区三区| 末发育女AV片一区二区| 亚洲精品自在在线观看| 国产精品久久久久久精品电影| 欧洲亚洲1卡二卡三卡2021| 伊人久久大香线蕉AV仙人| 国产欧美日韩免费看AⅤ视频| 日韩人妻无码一区2区3区| 69久久夜色精品国产69| 精品亚洲国产成人AV在线| 午夜理论片2019理论琪琪| 大色堂午夜福利国产TV6080 | 亚洲高清成人AV电影网站| 国产精品美女久久久久AV福利| 人妻丰满熟妇AV无码区不卡| 中文字幕亚洲综合久久综合 | 国产精品无码AV无码| 日产精品一卡2卡三卡4乱码| 99在线精品视频高潮喷吹| 老司机在线精品视频网站| 亚洲精品乱码久久久久久蜜桃| 国产仑乱无码内谢| 天堂8А√中文在线官网| 波多野结衣高清一区二区三区| 你真紧你这是要我的命吗| 欲しがる人妻 波多野结衣| 精品一区二区三区国产在线观看| 精品久久人妻AV中文字幕| 欧美性XXXXX极品少妇| 亚洲一区在线观看XXX| 啊轻点灬大JI巴太粗太长在线了| 国产乱人伦中文无无码视频试看| 久久精品这里热有精品| 熟女体下毛毛黑森林| 亚洲6080YY久久无码产自国| 中国老熟女重囗味HDXX| 久久综合九色综合欧美婷婷| 人妻聚色窝窝人体www一区91| 97色伦综合在线欧美视频| 免费无码AV电影在线观看| 中文字幕V亚洲ⅤV天堂| 狂野欧美性猛XXXX乱大交| 久久久久亚洲AV成人网址| 久久天天躁狠狠躁夜夜免费观看 | А√天堂中文最新版在线种子| 国产午夜亚洲精品国产成人| 趴下老子要从后面CAO你| 野花日本HD免费高清版7| 国产A∨国片精品青草视频| 男女猛烈激情XX00免费视频| 又嫩又紧欧美12P| 久久人人爽人人爽人人片AV高清| 亚洲综合久久成人AV| 久久久亚洲欧洲日产国码是AV| 一本一本久久A久久综合精品蜜桃 一本一本久久A久久综合精品 | 群体交乱之放荡娇妻| 成人国产精品一区二区网站| 日韩精品无码一区二区三区免费| 动漫高H纯肉无码视频在线观看| 色一情一乱一伦一视频免费看| 国产成人无码A区视频在线观看 | 国产精品门事件AV| 色欲久久九色一区二区三区| 性CHINESE新婚VIDEO| 成人Α片免费视频在线观看| 欧美少妇XXXXX| 国产精口品美女乱子伦高潮| JZZIJZZIJ日本成熟少妇| 一区适合晚上一个人看B站| 午夜福利一区二区三区在线观看| 国产又爽又黄又爽又刺激| 亚洲精品无码久久久久AV麻豆| 精品少妇人妻AV一区二区| 亚洲人成电影网站色WWW| 欧美精产国品一二三产品区别| 久久99精品国产麻豆| 高潮好爽视频在线观看| 亚洲国产精品无码中文字满| 久久久久琪琪去精品色一到本| 爸爸10岁幼儿TREE小学生| 亚洲AV无码ⅤS国产AV| 精品国偷自产在线视频| 夜里18款禁用软件APP| 老头握住校花的双乳| 插花弄玉小说荔枝很甜作者卿凌| 私人影院播放器大全| 精品久久久久久久免费人妻| 亚洲一区二区三区无码中文字幕 | 人妻丰满熟妇AV无码区乱| GOGO人体大胆高清啪啪| 天天影视网色香欲综合网| 国产性色强伦免费视频| 亚洲午夜国产精品无码| 日韩AV一区二区在线| 精品久久亚洲中文字幕| 在线天堂网WWW天堂在线| 无码人妻一区二区三区免费视频 | 强插女教师AV在线| 国产精品免费AⅤ片在线观看| 自偷自拍亚洲综合精品麻豆| 亚洲AV成人影视综合网| 欧美又粗又大BBBB疯视频AV| 国产午夜免费啪视频观看视频| 一本无码人妻在中文字幕| 无码AⅤ精品一区二区三区 | 加勒比久久综合久久鬼色88| 久久久久女人精品毛片| 野花社区在线观看免费直播WWW | 亚洲熟妇另类久久久久久| 少妇色欲av永久性精品爽妇| 免费光看午夜请高视频| 国产午夜精品一区二区三区老 | 无码秘 蜜桃一区二区三区 | 国产最大成人亚洲精品| 房中之术御女之功秘术| 377P欧洲日本亚洲大胆| 亚洲AV永久无码精品水牛影视| 日日噜狠狠噜天天噜AV|