Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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