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): |     def __init__(self, request): | ||||||
|         self.request = request |         self.request = request | ||||||
|         self.params = config.oidc_params |         self.params = config.oidc_params | ||||||
|         self.reqUrl = config.base_url |  | ||||||
|         self.setCrypt(self.params.get('cookie_crypt')) |         self.setCrypt(self.params.get('cookie_crypt')) | ||||||
| 
 | 
 | ||||||
|     def setReqUrl(self, base, path): |  | ||||||
|         self.reqUrl = '/'.join((base, path)) |  | ||||||
| 
 |  | ||||||
|     def setCrypt(self, key): |     def setCrypt(self, key): | ||||||
|         self.cookieCrypt = key and Fernet(key) or None |         self.cookieCrypt = key and Fernet(key) or None | ||||||
| 
 | 
 | ||||||
|  | @ -108,6 +104,7 @@ class Authenticator(DummyFolder): | ||||||
|         nonce = util.rndstr() |         nonce = util.rndstr() | ||||||
|         codeVerifier = util.rndstr2() |         codeVerifier = util.rndstr2() | ||||||
|         codeChallenge = util.hashS256(codeVerifier) |         codeChallenge = util.hashS256(codeVerifier) | ||||||
|  |         reqUrl = self.request.form.get('camefrom') or params['base_url'] | ||||||
|         args = dict( |         args = dict( | ||||||
|                 client_id=self.params['client_id'], |                 client_id=self.params['client_id'], | ||||||
|                 response_type='code', # 'code id_token token', |                 response_type='code', # 'code id_token token', | ||||||
|  | @ -115,9 +112,9 @@ class Authenticator(DummyFolder): | ||||||
|                 code_challenge=codeChallenge, code_challenge_method='S256', |                 code_challenge=codeChallenge, code_challenge_method='S256', | ||||||
|                 scope='openid profile email urn:zitadel:iam:user:resourceowner', |                 scope='openid profile email urn:zitadel:iam:user:resourceowner', | ||||||
|                 redirect_uri=self.params['callback_url'], |                 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'] |         authUrl = self.params['op_uris']['authorization_endpoint'] | ||||||
|         loginUrl = '?'.join((authUrl, urlencode(args))) |         loginUrl = '?'.join((authUrl, urlencode(args))) | ||||||
|         logger.debug('login: URL %s', loginUrl) |         logger.debug('login: URL %s', loginUrl) | ||||||
|  | @ -127,6 +124,7 @@ class Authenticator(DummyFolder): | ||||||
|         req = self.request |         req = self.request | ||||||
|         logger.debug('callback: %s %s', self, req.form) |         logger.debug('callback: %s %s', self, req.form) | ||||||
|         sdata = self.loadSession() |         sdata = self.loadSession() | ||||||
|  |         reqUrl = sdata.get('request_uri') or self.params['base_url'] | ||||||
|         code = req.form['code'] |         code = req.form['code'] | ||||||
|         # !check state: req.form['state'] == sdata['state'] |         # !check state: req.form['state'] == sdata['state'] | ||||||
|         args = dict( |         args = dict( | ||||||
|  | @ -152,7 +150,7 @@ class Authenticator(DummyFolder): | ||||||
|         ) |         ) | ||||||
|         self.storeSession(ndata) |         self.storeSession(ndata) | ||||||
|         logger.debug('callback: session data: %s', ndata) |         logger.debug('callback: session data: %s', ndata) | ||||||
|         req.response.redirect(self.reqUrl, trusted=True) |         req.response.redirect(reqUrl, trusted=True) | ||||||
| 
 | 
 | ||||||
|     def logout(self): |     def logout(self): | ||||||
|         #sdata = self.loadSession() |         #sdata = self.loadSession() | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue