laravel共享session, 實現單點登陸

laravel開發效率高很適合作web開發,但是session本身進行了加密,須要實現不一樣應用單點登陸就比較麻煩了,用nodejs實現了session的解密算法(只針對laravel5.1).javascript

理論上其餘服務只須要經過讀cookie裏存的session就能夠本身解密來實現本身的登陸檢測.php

import * as crypto from 'crypto'
import * as serialization from "php-serialization"

let laravelSession = 'eyJpdiI6IjJvMzJSVnNyb3l1eEZvQ3NSUlBcLzZ3PT0iLCJ2YWx1ZSI6IjkxeVJjaXFSY2tlNUxwV0djcitnaUFNVnJzYUhHcXVndUwxOEZQeFE2Z3FHbDIyUndPRzFQMWZBS1E3TUFTeEdKUGx5aCtIY3d6WVlcL1p1dU5nQmd1QT09IiwibWFjIjoiNjI2ZDUzN2MxZmZiMzZkNGI3NTkxNTM3NGZmOTU3MTRjZjQ1NmM5OTJhOTVlNzBmNzc2ZDk1YThkMzVlODVmNiJ9'

let data = JSON.parse(new Buffer(laravelSession, 'base64').toString())

// let data = {
//     "iv": 'PEGE6zj6C\/VdOmnwVXSFaw==',
//     "value": "fpKlXI2Sa1fq8mDIgwvBr1g235LvExcde8IZ0JY9Jw5DN3IArBQ\/2ghmU21yjReOLC84DBpkaIwcghwAorVPYg==",
//     "mac": "366d20bf35f7a4123f97659b3be8b1083eb15ffd29567b9699c220a5a6a00e95"
// }

const APP_KEY = 'laravel的APP_KEY'
let ivBase64 = new Buffer(data.iv, 'base64')  // base64 iv
let decipher = crypto.createDecipheriv('aes-256-cbc', APP_KEY, ivBase64)
let sessionId = decipher.update(data.value, 'base64', 'utf8')
console.log('session_id: ' + serialization.unserialize(sessionId))

解密獲得的session_id就是laravel實際的session_id.java

相關文章
相關標籤/搜索