def _determine_auth_handler(self, r): # Determine the Authenticaiton Handler to use (token, kerberos, NTLM) # First try the Token Authentication try: ArcGISServerTokenAuth._init(self, r) if self._auth_info.get("isTokenBasedSecurity"): self._instanceof = ArcGISServerTokenAuth return True except TokenAuthenticationError: # catch & throw away exception and try other handlers. pass # If token auth fails, check for "Web-Tier" security lr = self._last_request auths = [] if lr.status_code == 401 and lr.headers.get( "WWW-Authenticate") is not None: auths = lr.headers.get("WWW-Authenticate").split(", ") # Try Kerberos if 'Negotiate' in auths: test_req = requests.head(r.url, auth=HTTPKerberosAuth(), verify=self.verify) if test_req.status_code == 200: self._instanceof = HTTPKerberosAuth self._auth_info = {"isTokenBasedSecurity": False} HTTPKerberosAuth.__init__(self) return True # Try NTLM if 'Negotiate' in auths or 'NTLM' in auths: test_req = requests.head(r.url, auth=HttpNtlmAuth(self.username, self.password), verify=self.verify) if test_req.status_code == 200: self._instanceof = HttpNtlmAuth self._auth_info = {"isTokenBasedSecurity": False} HttpNtlmAuth.__init__(self, self.username, self.password) return True return False
def _determine_auth_handler(self, r): # Determine the Authenticaiton Handler to use (token, kerberos, NTLM) # First try the Token Authentication self._last_request = requests.head(self._get_token_url(r), verify=self.verify) if self._last_request.status_code == 200: ArcGISPortalTokenAuth._init(self, r) self._instanceof = ArcGISPortalTokenAuth self._auth_info = {"isTokenBasedSecurity": True} return True # If token auth fails, check for "Web-Tier" security lr = self._last_request auths = [] if lr.status_code == 401 and lr.headers.get( "WWW-Authenticate") is not None: auths = lr.headers.get("WWW-Authenticate").split(", ") # Try Kerberos if 'Negotiate' in auths: self._last_request = requests.head(r.url, auth=HTTPKerberosAuth(), verify=self.verify) if self._last_request.status_code == 200: self._instanceof = HTTPKerberosAuth self._auth_info = {"isTokenBasedSecurity": False} HTTPKerberosAuth.__init__(self) return True # Try NTLM if 'Negotiate' in auths or 'NTLM' in auths: self._last_request = requests.head(r.url, auth=HttpNtlmAuth( self.username, self.password), verify=self.verify) if self._last_request.status_code == 200: self._instanceof = HttpNtlmAuth self._auth_info = {"isTokenBasedSecurity": False} HttpNtlmAuth.__init__(self, self.username, self.password) return True return False