2 Authentification

Quelle que soit l'opération a effectuer, l'authentification est une étape préalable avant tout dialogue fonctionnel avec le service web REST. Il s'agit donc d'un premier appel au service web pour lui transmettre des données d'identification au format JSON dans le corps du message.

La réponse a une demande d'authentification est un TOKEN (longue chaîne de caractères) unique que l'appelant reçoit. Ce TOKEN est ensuite redonné dans tous les appels suivants pour authentifier le demandeur.



Demande d'authentification

L'étape d'authentification nécessite plusieurs informations chez l'appelant

Paramètre

Balise

Description

Domaine

"domain"

Nom du domaine windows ou mettre une zone vide si le code utilisateur contient nom de l’utilisateur@xxx.com ou nom de l’utilisateur@xxx.fr  dans ce cas le domaine sera xxxx sans utiliser cette balise.

Exemple en cloud : monuser@C123456.divalto.com correpond au domaine C123456.divalto.com

Utilisateur

"user"

Nom du compte utilisateur, dans le cloud ce code est de type utilisateur@xxxx.com

Mot de passe

"password"

Mot de passe du compte utilisateur

Environnement

"env"

Nom de l’environnement Divalto

Informations

“infos”

Informations complémentaires, notamment sur les performances (voir plus bas)



Header

La demande d'authentification n'utilise pas de balise HEADER particulière (pas de Authorization).

Un HEADER est uniquement utilisé pour indiqué le Content-Type : application/json


Informations complémentaires : performances

Le champ 'infos' peut contenir les commandes suivantes:

<perf>

1

La balise perf à 1 indique que le demandeur souhaite obtenir des informations générales et de performances sur l'exécution de la demande.

Si la balise est donnée lors de l’authentification, toutes les demandes utilisant le token correspondant se feront avec réponse de performances.

La réponse est obtenue dans la balise "infos" de la réponse. Voir plus bas pour le format de la réponse.

Exemple de demande : "infos" : "<perf>1"


L'utilisateur à utiliser est nécessairement un utilisateur WINDOWS reconnu par le serveur web windows IIS.

Il devra AUSSI exister en tant qu'utilisateur HARMONY (xlog).

A noter que l’utilisateur appelant sera celui vu par les traitements métiers, mais que l’utilisateur défini au niveau du paramétrage Harmony des services web ($webservice par exemple) doit également être mis en oeuvre



Ces informations sont envoyée sur la : base commune de l'URL + '/api/v1/Authent/Auth'



Exemple d'URL sur un poste local:

http://localhost:8080/DhsDivaltoServiceDivaApiRest/api/v1/Authent/Auth



Exemple d'URL en Divalto cloud:

https://api.divaltocloud.com/123456/TEST1/api/v1/Authent/Auth



Exemple de corps du message d'authentification:

{

    "domain":"divalto",

    "user": "academy",

    "password": "123456",

    "env": "ERP216"

}



Réponse d'authentification

Le service web REST répond a une demande d'authentification sous une forme JSON avec les résultats suivants:

Balise

Description

"error"

Contient le CODE ERREUR

  • 0 signifie que l'accès est autorisé, et le token est récupérable dans la balise "access_token"

  • tout autre valeur indique une erreur

"txterr"

Texte de l'erreur, si applicable

"access_token"

Valeur du TOKEN

"infos"

Informations complémentaires, par exemple de performance

"{\"xperf\" : {\"ExecuteSQLAuth\" : \"16\",\"LoadUser\" : \"1\" }}"

 

Le champs 'infos', dans le cas d'une demande d'information de performance, peut contenir plusieurs informations indiquant des temps d'exécution.

Exemple : "{\"xperf\" : {\"ExecuteSQLAuth\" : \"16\",\"LoadUser\" : \"1\" }}"

 

 

Exemple de réponse en réussite avec TOKEN :

{
    "error"0,
    "access_token""eyJhbGciOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNobWFjLNoYTI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudCI6IkRpdmFsdG9BcGlSZXN0IiwidXNlciI6mJsaXR0ZWwiLCJwYXNzd29yZCI6ImxrajEyMzIxQSIsImVudiI6IkVSUDIxNSIsImRvbWFpbiI6ImRpdmFsdG8iLCJleHAiOiI0DI4MSw0NjYzMTY4NjM0In0.Vx_Qe_WbRhA0qjMOP4tiB-hUnC2lBwsy68GDzzryLhk",
    "txterr""",
    "infos"""
}



Exemple de réponse en échec :

{
    "error"1,
    "access_token""",
    "txterr""Erreur de connexion en mode ldap global sur le domaine 'divalto' utilisateur 'xxxxx' mot de passe '**********'  [System.DirectoryServices.AccountManagement.PrincipalServerDownException: Impossible de contacter le serveur. ---> System.DirectoryServices.Protocols.LdapException: Le serveur LDAP n'est pas disponible.\r\n   à System.DirectoryServices.Protocols.LdapConnection.Connect()\r\n   à System.DirectoryServices.Protocols.LdapConnection.SendRequestHelper(DirectoryRequest request, Int32& messageID)\r\n   à System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request, TimeSpan requestTimeout)\r\n   à System.DirectoryServices.Protocols.LdapConnection.SendRequest(DirectoryRequest request)\r\n   à System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)\r\n   --- Fin de la trace de la pile d'exception interne ---\r\n   à System.DirectoryServices.AccountManagement.PrincipalContext.ReadServerConfig(String serverName, ServerProperties& properties)\r\n   à System.DirectoryServices.AccountManagement.PrincipalContext.DoServerVerifyAndPropRetrieval()\r\n   à System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name, String container, ContextOptions options, String userName, String password)\r\n   à System.DirectoryServices.AccountManagement.PrincipalContext..ctor(ContextType contextType, String name)\r\n   à DhsDivaltoServiceDivaApiRest.GenererToken.getAD(String domain, String& txterr, String env, Int32 EtapeExecute, Int32& modemachine, String user, String password)]",
    "infos"""
}