auth: use form['camefrom'] as requested URI, store in initial session and use for final redirect
This commit is contained in:
		
							parent
							
								
									2f87493144
								
							
						
					
					
						commit
						05499d5d41
					
				
					 1 changed files with 5 additions and 7 deletions
				
			
		|  | @ -85,12 +85,8 @@ class Authenticator(DummyFolder): | |||
|     def __init__(self, request): | ||||
|         self.request = request | ||||
|         self.params = config.oidc_params | ||||
|         self.reqUrl = config.base_url | ||||
|         self.setCrypt(self.params.get('cookie_crypt')) | ||||
| 
 | ||||
|     def setReqUrl(self, base, path): | ||||
|         self.reqUrl = '/'.join((base, path)) | ||||
| 
 | ||||
|     def setCrypt(self, key): | ||||
|         self.cookieCrypt = key and Fernet(key) or None | ||||
| 
 | ||||
|  | @ -108,6 +104,7 @@ class Authenticator(DummyFolder): | |||
|         nonce = util.rndstr() | ||||
|         codeVerifier = util.rndstr2() | ||||
|         codeChallenge = util.hashS256(codeVerifier) | ||||
|         reqUrl = self.request.form.get('camefrom') or params['base_url'] | ||||
|         args = dict( | ||||
|                 client_id=self.params['client_id'], | ||||
|                 response_type='code', # 'code id_token token', | ||||
|  | @ -115,9 +112,9 @@ class Authenticator(DummyFolder): | |||
|                 code_challenge=codeChallenge, code_challenge_method='S256', | ||||
|                 scope='openid profile email urn:zitadel:iam:user:resourceowner', | ||||
|                 redirect_uri=self.params['callback_url'], | ||||
|                 request_uri=self.reqUrl, | ||||
|         ) | ||||
|         self.storeSession(dict(state=state, nonce=nonce, code_verifier=codeVerifier)) | ||||
|         self.storeSession(dict(state=state, nonce=nonce, request_uri=reqUrl, | ||||
|                                code_verifier=codeVerifier)) | ||||
|         authUrl = self.params['op_uris']['authorization_endpoint'] | ||||
|         loginUrl = '?'.join((authUrl, urlencode(args))) | ||||
|         logger.debug('login: URL %s', loginUrl) | ||||
|  | @ -127,6 +124,7 @@ class Authenticator(DummyFolder): | |||
|         req = self.request | ||||
|         logger.debug('callback: %s %s', self, req.form) | ||||
|         sdata = self.loadSession() | ||||
|         reqUrl = sdata.get('request_uri') or self.params['base_url'] | ||||
|         code = req.form['code'] | ||||
|         # !check state: req.form['state'] == sdata['state'] | ||||
|         args = dict( | ||||
|  | @ -152,7 +150,7 @@ class Authenticator(DummyFolder): | |||
|         ) | ||||
|         self.storeSession(ndata) | ||||
|         logger.debug('callback: session data: %s', ndata) | ||||
|         req.response.redirect(self.reqUrl, trusted=True) | ||||
|         req.response.redirect(reqUrl, trusted=True) | ||||
| 
 | ||||
|     def logout(self): | ||||
|         #sdata = self.loadSession() | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue