es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error 400 en la API de Sharefile Python3 con inicio de sesión SSO.

Tengo un pequeño fragmento de api.sharefile.com.

def authenticate(hostname, username, password): 
    uri_path = '/oauth/token'
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
    params = {
        'grant_type': 'password',
        'client_id': 'xxx',
        'client_secret': 'xxx',
        'username': username,
        'password': password
    }

http = httplib.HTTPSConnection(hostname)
http.request('POST', uri_path, urllib.urlencode(params), headers=headers)
response = http.getresponse()

print(response.status, response.reason)
token = None
if response.status == 200:
    token = json.loads(response.read())
    http.close()
else:
    print(response.status)
print(token)

authenticate(‘example.sharefile.com’, ‘xxx@example.com’, ‘123456’)

Esto funciona bien cuando se utiliza un inicio de sesión estándar de ShareFile pero falla cuando se utilizan usuarios autenticados con SSO.
Por favor, aconseje cómo resolver.

Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, será necesario modificar el código para admitir la autenticación de inicio de sesión único (SSO) para los usuarios de Sharefile.

    En primer lugar, necesitarás obtener el punto final de autenticación SSO y el ID de cliente de la documentación de la API de Sharefile. Una vez que tengas esta información, puedes modificar el diccionario params en la función authenticate para incluir los parámetros de autenticación SSO:

    params = {
        'grant_type': 'password',
        'client_id': 'xxx',
        'client_secret': 'xxx',
        'username': username,
        'password': password,
        'authentication': 'xxx',
        'assertion': 'xxx'
    }
    

    El parámetro authentication debe contener el punto final de autenticación SSO, y el parámetro assertion debe contener la afirmación SAML obtenida del proveedor SSO.

    También deberás modificar las cabeceras para incluir el formato de afirmación SAML:

    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Authorization': 'Bearer {}'.format(assertion)
    }
    

    Aquí, ‘assertion’ se refiere a la afirmación SAML obtenida del proveedor SSO.

    Con estas modificaciones, la función authenticate ahora debería funcionar tanto para usuarios estándar como para usuarios autenticados mediante SSO.

Comments are closed.