104 lines
3.3 KiB
HTML
104 lines
3.3 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
|
<title>Knife4j-OAuth2</title>
|
|
<script src="axios.min.js"></script>
|
|
</head>
|
|
<body>
|
|
<script type="text/javascript">
|
|
(function(){
|
|
function OAuth2(url){
|
|
this.url=url;
|
|
this.code=null;
|
|
this.accessToken=null;
|
|
this.tokenType=null;
|
|
this.state=null;
|
|
//缓存在localStorage中的对象
|
|
this.cacheValue=null;
|
|
}
|
|
OAuth2.prototype.init=function(){
|
|
var local=this.url;
|
|
this.code=this.getKey("code",local,"");
|
|
this.accessToken=this.getKey("access_token",local,"");
|
|
this.tokenType=this.getKey("token_type",local,"Bearer");
|
|
this.state=this.getKey("state",local);
|
|
if(window.localStorage){
|
|
var value=window.localStorage.getItem(this.state);
|
|
if(this.strNotBlank(value)){
|
|
this.cacheValue=JSON.parse(value);
|
|
}
|
|
}
|
|
}
|
|
OAuth2.prototype.auth=function(){
|
|
if(this.strNotBlank(this.code)){
|
|
this.authorizationCode();
|
|
}else{
|
|
this.implicit();
|
|
}
|
|
}
|
|
OAuth2.prototype.getKey=function(key,str,defaultValue){
|
|
var reg=new RegExp(".*?"+key+"=(.*?)(&.*)?$","ig");
|
|
var val=defaultValue;
|
|
if(reg.test(str)){
|
|
val=RegExp.$1;
|
|
}
|
|
return val;
|
|
}
|
|
OAuth2.prototype.strNotBlank=function(str){
|
|
var flag = false;
|
|
if ( str != undefined &&str != null &&str != "") {
|
|
flag = true;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
OAuth2.prototype.implicit=function(){
|
|
this.cacheValue.accessToken=this.tokenType+" "+this.accessToken;
|
|
this.cacheValue.tokenType=this.tokenType;
|
|
this.cacheValue.granted=true;
|
|
window.localStorage.setItem(this.state,JSON.stringify(this.cacheValue))
|
|
window.close();
|
|
}
|
|
OAuth2.prototype.authorizationCode=function(){
|
|
var that=this;
|
|
console.log(this.cacheValue);
|
|
var url=this.cacheValue.tokenUrl;
|
|
var params={
|
|
"grant_type":"authorization_code",
|
|
"code":this.code,
|
|
"redirect_uri":decodeURIComponent(this.cacheValue.redirectUri),
|
|
"client_id":this.cacheValue.clientId,
|
|
"client_secret":this.cacheValue.clientSecret
|
|
}
|
|
let instance=axios.create();
|
|
let requestConfig={
|
|
url: url,
|
|
method: 'post',
|
|
timeout: 0,
|
|
//此data必传,不然默认是data:undefined,https://github.com/axios/axios/issues/86
|
|
//否则axios会忽略请求头Content-Type
|
|
data: null,
|
|
params:params
|
|
}
|
|
instance.request(requestConfig).then(res=>{
|
|
let data=res.data;
|
|
if(data!=null&&data!=undefined) {
|
|
that.cacheValue.accessToken=data.token_type+" "+data.access_token;
|
|
that.cacheValue.tokenType=data.token_type;
|
|
that.cacheValue.granted=true;
|
|
window.localStorage.setItem(that.state,JSON.stringify(that.cacheValue))
|
|
window.close();
|
|
}
|
|
|
|
})
|
|
}
|
|
var oauth=new OAuth2(window.location.href);
|
|
oauth.init();
|
|
oauth.auth();
|
|
})()
|
|
</script>
|
|
|
|
</body>
|
|
</html> |