|  |  | @ -162,7 +162,7 @@ class KeycloakOpenID: | 
			
		
	
		
			
				
					|  |  |  |                        "redirect-uri": redirect_uri} | 
			
		
	
		
			
				
					|  |  |  |         return URL_AUTH.format(**params_path) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     def token(self, username="", password="", grant_type=["password"], code="", redirect_uri="", totp=None): | 
			
		
	
		
			
				
					|  |  |  |     def token(self, username="", password="", grant_type=["password"], code="", redirect_uri="", totp=None, **extra): | 
			
		
	
		
			
				
					|  |  |  |         """ | 
			
		
	
		
			
				
					|  |  |  |         The token endpoint is used to obtain tokens. Tokens can either be obtained by | 
			
		
	
		
			
				
					|  |  |  |         exchanging an authorization code or by supplying credentials directly depending on | 
			
		
	
	
		
			
				
					|  |  | @ -183,6 +183,8 @@ class KeycloakOpenID: | 
			
		
	
		
			
				
					|  |  |  |         payload = {"username": username, "password": password, | 
			
		
	
		
			
				
					|  |  |  |                    "client_id": self.client_id, "grant_type": grant_type, | 
			
		
	
		
			
				
					|  |  |  |                    "code": code, "redirect_uri": redirect_uri} | 
			
		
	
		
			
				
					|  |  |  |         if payload: | 
			
		
	
		
			
				
					|  |  |  |             payload.update(extra) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         if totp: | 
			
		
	
		
			
				
					|  |  |  |             payload["totp"] = totp | 
			
		
	
	
		
			
				
					|  |  | 
 |