-
Notifications
You must be signed in to change notification settings - Fork 0
/
authorize.js
99 lines (99 loc) · 3.83 KB
/
authorize.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
///////////////验证中心方法 authorize(baseUrl,cookieName)////////////////////////////////////
//验证完成之后 window.token_jwt_data 就是具体的信息
//********************************************************************* */
const tools = require('./tools');
function getTokenByTicket(url, success, error) {
var xhr = new XMLHttpRequest();
xhr.onload = function (event) {
var target = event.target;
success(JSON.parse(target.responseText));
};
if (error) xhr.onerror = error;
xhr.open('get', url, false);
xhr.send();
}
function parseTokenSetMessage(token) {
if (token) {
var data = token.match(/\.(\w+)\./)[1];
window.token_jwt_data = JSON.parse(tools.base64DeCode(data));
//移除浏览器上的ticket
var newUrl = location.href.replace(/[?&]?ticket=[\w-_]*/, "");
history.replaceState({}, "", newUrl);
}
}
//获取authorization(jwt token)
function getAuthorization(cookieName) {
return tools.getCookie(cookieName);
}
//获取用户基本信息
function getUserData(cookieName) {
var authorization = getAuthorization(cookieName);
if (authorization) {
var data = authorization.match(/\.(\w+)\./)[1];
return JSON.parse(tools.base64DeCode(data));
}
return null;
}
//sso验证方法 baseUrl:sso项目地址,cookieName:生成的cookiName
function authorize(baseUrl, cookieName) {
var getTokenUrl = tools.trimEndChar(baseUrl, '/') + "/sso/gettoken";
var ssourl = tools.getQueryString("ssourls");
//sso退出
if (ssourl) {
////////清除本站cookie
var ssoUrls = JSON.parse(tools.base64DeCode(tools.base64SecureURLDecode(ssourl)));
var returnUrl = tools.getReturnUrl("returnUrl");
var cookieValue = tools.getCookie(cookieName);
if (cookieValue) {
tools.setCookie(cookieName, cookieValue, -1);
}
/////////////////////
for (var i = 0; i < ssoUrls.length; i++) {
if (window.location.href.indexOf(ssoUrls[i]) > -1) {
ssoUrls.splice(i, 1);
break;
}
}
if (ssoUrls.length > 0) {
var newSsoUrls = JSON.stringify(ssoUrls);
window.location.href = ssoUrls[0] + "?ssourls=" + tools.base64SecureURLEncode(tools.base64EnCode(newSsoUrls)) + "&returnUrl=" + returnUrl;
}
else //最后一个
{
window.location.href = tools.trimEndChar(baseUrl, '/') + "/sso/login?returnUrl=" + returnUrl;
}
return;
}
var authorization = tools.getCookie(cookieName);
var ticket = tools.getTicket();
//cookie不可用的时候
if (!authorization) {
//cookie和ticket都不可用的时候
if (!ticket) {
window.location.href = tools.trimEndChar(baseUrl, '/') + "/sso/login?returnUrl=" + window.location.href;
return;
}
//cookie不可用,但是有ticket
else {
var from = tools.trimEndChar(window.location.host, "/").replace(new RegExp("https?://|www."), '');
getTokenByTicket(getTokenUrl + "?from=" + from + "&ticket=" + ticket, function (result) {
if (result.code == 0 && result.result) {
parseTokenSetMessage(result.result);
//通过ticket获取到了token,一般发生在首次登陆
tools.setCookie(cookieName, result.result, 'Lax');
} else {
//两者都不可用
window.location.href = tools.trimEndChar(baseUrl, '/') + "/sso/login?returnUrl=" + window.location.href;
}
});
}
} else {
parseTokenSetMessage(authorization);
}
}
module.exports = {
authorize: authorize,
parseTokenSetMessage: parseTokenSetMessage,
getAuthorization: getAuthorization,
getUserData: getUserData
}