wake-up-neo.com

Melden Sie sich über die API bei Keycloak an

Ich habe zwei verschiedene Anwendungen: say Application1 und Application2

  1. Ich habe Application2 mit keycloak integriert und kann mich über die Login-Seite von Keycloak bei dieser Anwendung anmelden.

  2. Nun möchte ich, wenn ich mich bei meiner Application1 (ohne Keycloak) anmelde, kann ich eine API von Keycloak aufrufen, um sich bei application2 anzumelden (ohne die Login-Seite von Keycloak zu rendern).

Es ist machbar? Wenn ja, wie?

Jede Hilfe wird sehr geschätzt.

Vielen Dank

9
Akhil Prajapati

Sie fordern Ihre Benutzer effektiv auf, darauf zu vertrauen, dass Application1 ihre Keycloak-Anmeldeinformationen sicher verwaltet. Dies wird aus diesem Grund nicht empfohlen

  1. eine bessere Sicherheit wird erreicht, wenn der Benutzer zur Eingabe seiner Anmeldeinformationen an keycloak weitergeleitet wird. In einer idealen Welt sollte keine Clientanwendung Benutzeranmeldeinformationen verarbeiten oder darauf zugreifen können.
  2. Es hat keine Auswirkung auf den Zweck der einmaligen Anmeldung, wenn ein Benutzer seine Anmeldeinformationen nur für die erste Anwendung eingeben muss, auf die er zugreifen muss (vorausgesetzt, die Sitzung ist nicht abgelaufen).

Wenn Sie jedoch Application1 steuern und vertrauen können und dies aus älteren oder anderen Gründen tun müssen, können Sie den Ressourcenbesitzer-Anmeldeinformationsfluss mit der Bezeichnung "Direktzugriff" in der Keycloak-Client-Definition aktivieren und dann POST die Anmeldeinformationen des Benutzers als form-urlencoded - Datentyp an

https://<keycloak-url>/auth/realms/<realm>/protocol/openid-connect/token

Die Parameter werden sein

grant_type=password
client_id=<Application1's client id>
client_secret=<the client secret>
username=<the username>
password=<the password>
scope=<space delimited list of scope requests>

Die Antwort ist ein gültiges JWT-Objekt oder ein 4xx-Fehler, wenn die Anmeldeinformationen ungültig sind.

16

Wenn Ihre Frage richtig beantwortet wurde, versuchen Sie, einen reinen Trägerdienst über eine andere bereits angemeldete Anwendung aufzurufen. Sie haben auch nicht erwähnt, ob Sie Spring Boot oder ein anderes Framework wie dieses verwenden Verwenden des Spring Boot für Ihre serverseitige Anwendung.

Das folgende Beispiel bezieht sich auf einen einfachen Aufruf einer authentifizierten API an eine andere API, die beide Spring Boot verwenden:

import org.keycloak.KeycloakPrincipal;
import org.keycloak.adapters.RefreshableKeycloakSecurityContext;
import org.keycloak.adapters.springsecurity.account.SimpleKeycloakAccount;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

@Component
public class AnotherServiceClient {
    public TypeOfObjectReturnedByAnotherService getFromAnotherService() {
        RestTemplate restTemplate = new RestTemplate();
        String endpoint = "http://localhost:40030/another/service/url";
        String bearerToken = getAuthorizationToken();

        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", "bearer " + bearerToken);

        HttpEntity entity = new HttpEntity(headers);

        ResponseEntity<TypeOfObjectReturnedByAnotherService> response = restTemplate.exchange(endpoint, HttpMethod.GET, entity, TypeOfObjectReturnedByAnotherService.class);

        return response.getBody();
    }

    private String getAuthorizationToken() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        SimpleKeycloakAccount details = (SimpleKeycloakAccount) authentication.getDetails();

        KeycloakPrincipal<?> keycloakPrincipal = (KeycloakPrincipal<?>) details.getPrincipal();

        RefreshableKeycloakSecurityContext context = (RefreshableKeycloakSecurityContext) getPrincipal().getKeycloakSecurityContext();

        return context.getTokenString();
    }
}

Auf diese Weise können Sie das tatsächlich von Ihrem Origin-Dienst generierte gültige Token an einen anderen Dienst senden.

1
Fabio HSA

YES - Sie können sich mit der Keycloak-Anmeldeschnittstelle ohne die Anmeldung bei Application-1 anmelden.

Hierzu stehen verschiedene Client-Adapter zur Verfügung. Hier haben Sie Ihre Bewerbungsarbeit nicht erwähnt.

Weitere Informationen zu den Keyclaok-Clientadaptern finden Sie hier: hier klicken

Wenn Sie beispielsweise den Node.js-Adapter wählen, können Sie dem Link folgen: node.js-Adapter

keycloak-Implementierung mit node.js-Adapter, Details zu den REST - APIs und zum Token-Validierungsmechanismus werden in diesem Link klicken Sie zum Beispiel

0
basith