Comment obtenir un jeton pour utiliser dans vos appels API

  1. Un jeton est associé à un utilisateur d’EPC. Pour générer un jeton pour un utilisateur, vous avez besoin de son nom d’utilisateur et de son mot de passe.
  1. Lorsqu’un jeton est généré, il est également lié à une session dans EPC. Si la session est terminée, le jeton deviendra invalide. Une session se terminera également automatiquement après le délai de SESSION_TIMEOUT, trouvé dans la section Admin Système. Cela peut être modifié (en minutes) dans l’onglet Avancé. Notez que votre utilisateur doit avoir des droits d’administration système pour accéder à cette section.

Une session peut être terminée manuellement dans la boîte ‘Gérer les sessions EPC’, dans l’onglet Général, en cliquant sur la corbeille à côté de la session que vous souhaitez fermer.

Un jeton contient également une date d’expiration indépendante d’une session. Vous pouvez la modifier en éditant le paramètre WEBTOKEN_EXPIRES_IN dans la section Admin Système (en jours).

  1. Appelez un service avec ces informations pour obtenir un jeton valide. Pour obtenir un jeton, vous devez envoyer une requête POST à l’URL https://VOTREEPC.interfacing.com/api/v1/login/local avec un corps JSON contenant le nom d’utilisateur et le mot de passe.
  1. Dans la réponse, il y aura un cookie nommé access_token. Vous pouvez soit utiliser ce cookie pour tous les appels API ultérieurs, soit utiliser le jeton en tant que jeton Bearer en utilisant l’en-tête de requête http Authorization standard.

Voici un exemple de cet échange :

15:35:15.889 request :
1 > POST https://localhost/login/local
1 > Content-Type: application/json; charset=UTF-8
1 > Content-Length: 45
1 > Host: localhost
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.13 (Java/11.0.15)
1 > Accept-Encoding: gzip,deflate
{
"password": "Passw0rd",
"username": "myecpuser"
}
15:35:16.011 temps de réponse en millisecondes : 122
1 < 302
1 < Date: Wed, 08 Jun 2022 19:35:16 GMT
1 < Content-Type: text/plain; charset=utf-8
1 < Content-Length: 23
1 < Connection: keep-alive
1 < Cache-Control: no-store
1 < Set-Cookie: [loginsuccess=true; Path=/, access_token=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...; Expires=Thu, 01 Jan 1970 00:00:00 GMT]
1 < Location: /
1 < Vary: Accept
1 < Age: 0
1 < Via: 1.1 varnish (Varnish/7.1)
1 < X-Frame-Options: SAMEORIGIN
1 < X-XSS-Protection: 1; mode=block
1 < X-Content-Type-Options: nosniff
1 < Referrer-Policy: no-referrer-when-downgrade
1 < Content-Security-Policy: default-src 'self' http: https: data: blob: 'unsafe-inline' 'unsafe-eval'
1 < Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
1 < X_SRV: EPC

Exemple Curl

curl --request POST --url 'https://epcdev.interfacing.com/login/local' --header 'Content-Type: application/json' --data '{"username": "myecpuser", "password": "Passw0rd"}' -c /tmp/cookie.tmp

Code d’exemple JAVA utilisant Spring Boot:

package com.interfacing.epc.sync.bpc.client;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContextException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseCookie;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import reactor.core.publisher.Mono;
import com.interfacing.epc.sync.util.WebClientUtils;
@Configuration
@RequiredArgsConstructor
@Slf4j
public class BpcWebClient {
    private final WebClient.Builder webClientBuilder;
    @Value("${bpc.baseUrl}")
    private String baseUrl;
    @Value("${bpc.username}")
    private String username;
    @Value("${bpc.password}")
    private String password;
    @Value("${bpc.wiretap}")
    private boolean wiretap;
    @Bean
    public WebClient bpcClient() {
        WebClient.Builder clientBuilder = webClientBuilder.baseUrl(baseUrl + "/api/v1").defaultHeader(HttpHeaders.AUTHORIZATION, authorization());
        log.debug("BPC client created");
        return WebClientUtils.build(clientBuilder, this.getClass().getPackageName() + ".bpcClient", wiretap);
    }
    private String authorization() {
        WebClient.Builder clientBuilder = webClientBuilder.clone().baseUrl(baseUrl + "/login/local");
        Optional<ResponseCookie> s = WebClientUtils.build(clientBuilder, this.getClass().getPackageName() + ".authorization", wiretap)
                .post()
                .contentType(MediaType.APPLICATION_JSON)
                .body(BodyInserters.fromValue(new LoginRequest(username, password)))
                .exchangeToMono(r -> Mono.justOrEmpty(r.cookies().getFirst("access_token")))
                .blockOptional();
        if (s.isPresent())
        {
            return "Bearer " + s.get().getValue();
        }
        else
        {
            throw new ApplicationContextException("Invalid username/password for BPC");
        }
    }
}

Réaction

Était-ce utile?

Oui Non
Vous avez indiqué que ce sujet ne vous a pas été utile ...
Pouvez-vous SVP laisser un commentaire nous disant pourquoi? Merci!
Merci pour vos commentaires.

Laissez votre avis sur ce sujet.

SVP ne pas utiliser pour des questions de support technique.
Visit the Support Portal

Valider