make sure created tokens don't live longer than the authorization
This commit is contained in:
		
							parent
							
								
									2dfbd235c9
								
							
						
					
					
						commit
						ed0aca5783
					
				@ -14,6 +14,7 @@
 | 
				
			|||||||
    "bluebird": "^3.5.0",
 | 
					    "bluebird": "^3.5.0",
 | 
				
			||||||
    "elliptic": "^6.4.0",
 | 
					    "elliptic": "^6.4.0",
 | 
				
			||||||
    "jsonwebtoken": "^7.4.1",
 | 
					    "jsonwebtoken": "^7.4.1",
 | 
				
			||||||
    "jwk-to-pem": "^1.2.6"
 | 
					    "jwk-to-pem": "^1.2.6",
 | 
				
			||||||
 | 
					    "ms": "^2.0.0"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										22
									
								
								rest.js
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								rest.js
									
									
									
									
									
								
							@ -8,6 +8,22 @@ function makeB64UrlSafe(b64) {
 | 
				
			|||||||
  return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=*$/, '');
 | 
					  return b64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=*$/, '');
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function timespan(duration, max) {
 | 
				
			||||||
 | 
					  var timestamp = Math.floor(Date.now() / 1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (typeof duration === 'string') {
 | 
				
			||||||
 | 
					    duration = Math.floor(require('ms')(duration) / 1000);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  if (typeof duration !== 'number') {
 | 
				
			||||||
 | 
					    return timestamp;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (max && timestamp+duration > max) {
 | 
				
			||||||
 | 
					    return max - timestamp;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  return duration;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports.create = function (bigconf, deps, app) {
 | 
					module.exports.create = function (bigconf, deps, app) {
 | 
				
			||||||
  var Jwks = { restful: {} };
 | 
					  var Jwks = { restful: {} };
 | 
				
			||||||
  var Grants = { restful: {} };
 | 
					  var Grants = { restful: {} };
 | 
				
			||||||
@ -445,16 +461,18 @@ module.exports.create = function (bigconf, deps, app) {
 | 
				
			|||||||
            kid: jwk.kid
 | 
					            kid: jwk.kid
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					        var accessOpts  = {expiresIn: timespan(req.body.exp || '1d', token_info.exp)};
 | 
				
			||||||
 | 
					        var refreshOpts = {expiresIn: timespan(req.body.refresh_exp, token_info.exp)};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        var jwt = require('jsonwebtoken');
 | 
					        var jwt = require('jsonwebtoken');
 | 
				
			||||||
        var result = {};
 | 
					        var result = {};
 | 
				
			||||||
        result.scope = token_info.scope;
 | 
					        result.scope = token_info.scope;
 | 
				
			||||||
        result.access_token = jwt.sign(payload, pem, Object.assign({expiresIn: req.body.exp || '1d'}, opts));
 | 
					        result.access_token = jwt.sign(payload, pem, Object.assign(accessOpts, opts));
 | 
				
			||||||
        if (req.body.refresh_token) {
 | 
					        if (req.body.refresh_token) {
 | 
				
			||||||
          if (token_info.refresh_token) {
 | 
					          if (token_info.refresh_token) {
 | 
				
			||||||
            result.refresh_token = token_info.refresh_token;
 | 
					            result.refresh_token = token_info.refresh_token;
 | 
				
			||||||
          } else {
 | 
					          } else {
 | 
				
			||||||
            result.refresh_token = jwt.sign(payload, pem, Object.assign({expiresIn: req.body.refresh_exp}, opts));
 | 
					            result.refresh_token = jwt.sign(payload, pem, Object.assign(refreshOpts, opts));
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user