Utwórz łącznik tożsamości

Domyślnie Google Cloud Search rozpoznaje tylko tożsamości Google zapisane w Google Cloud Directory (użytkownicy i grupy). Oprogramowanie sprzęgające tożsamości umożliwia: synchronizować tożsamości Twojej firmy z tożsamościami Google używanymi w Google Cloud Search.

Google udostępnia te opcje tworzenia łączników tożsamości:

  • Identity Connector SDK. Ta opcja jest przeznaczona dla programistów, w języku programowania Java. Pakiet Identity Connector SDK to kod wokół interfejsu API REST, co pozwala szybko tworzyć oprogramowanie sprzęgające. Aby utworzyć oprogramowania sprzęgającego tożsamości za pomocą pakietu SDK znajdziesz w dokumentacji, która opisuje Utwórz oprogramowanie sprzęgające tożsamości za pomocą pakietu Identity Connector SDK.

  • Niskopoziomowy interfejs API typu REST i biblioteki API. Te opcje są przeznaczone dla programistów, którzy mogą nie programować w Javie lub których baza kodu lepiej pasuje interfejs API typu REST lub biblioteka. Aby utworzyć oprogramowanie sprzęgające tożsamości za pomocą interfejsu API REST, zapoznaj się z artykułem do Directory API: Konta użytkowników dla informacji na temat użytkowników map Dokumentacja Cloud Identity dla informacje o grupach mapowania.

Tworzenie oprogramowania sprzęgającego tożsamości za pomocą pakietu Identity Connector SDK

Typowy łącznik tożsamości wykonuje te zadania:

  1. Skonfiguruj oprogramowanie sprzęgające.
  2. Pobierz wszystkich użytkowników z systemu tożsamości firmy i wyślij ich do Google do synchronizacji z tożsamościami Google.
  3. Pobierz wszystkie grupy z systemu tożsamości firmy i wyślij je do Google do synchronizacji z tożsamościami Google.

Skonfiguruj zależności

Aby korzystać z pakietu SDK, musisz w pliku kompilacji uwzględnić określone zależności. Kliknij na karcie poniżej, aby wyświetlić zależności dla środowiska kompilacji:

Maven

<dependency>
<groupId>com.google.enterprise.cloudsearch</groupId>
<artifactId>google-cloudsearch-identity-connector-sdk</artifactId>
<version>v1-0.0.3</version>
</dependency>

Gradle

 compile group: 'com.google.enterprise.cloudsearch',
         name: 'google-cloudsearch-identity-connector-sdk',
         version: 'v1-0.0.3'

Tworzenie konfiguracji oprogramowania sprzęgającego

Każde oprogramowanie sprzęgające ma plik konfiguracji zawierający parametry używane przez takie jak identyfikator repozytorium. Parametry są zdefiniowane jako par klucz-wartość, takich jak api.sourceId=1234567890abcdef

Pakiet SDK Google Cloud Search zawiera kilka konfiguracji dostarczonych przez Google parametrów używanych przez wszystkie oprogramowanie sprzęgające. Musisz zadeklarować: Parametry dostarczone przez Google w pliku konfiguracyjnym:

  • W przypadku łącznika treści musisz zadeklarować api.sourceId i api.serviceAccountPrivateKeyFile, ponieważ te parametry identyfikują lokalizację. i klucza prywatnego potrzebnego do uzyskania dostępu do repozytorium.
  • W przypadku łącznika tożsamości musisz zadeklarować api.identitySourceId jako określa lokalizację zewnętrznego źródła tożsamości. Jeśli jesteś synchronizujesz użytkowników, musisz też zadeklarować api.customerId jako unikalny identyfikator dla konto Google Workspace Twojej firmy.

O ile nie chcesz zastąpić wartości domyślnych innych ustawień nie musisz deklarować ich w pliku konfiguracji. Dodatkowe informacje na temat parametrów konfiguracji dostarczonych przez Google, takich jak jak generować identyfikatory i klucze, zapoznaj się z artykułem Parametry konfiguracji udostępnione przez Google.

Możesz też zdefiniować własne parametry repozytorium do wykorzystania w .

Przekaż plik konfiguracji do oprogramowania sprzęgającego

Ustaw właściwość systemową config, aby przekazywać plik konfiguracji do . Możesz ustawić właściwość za pomocą argumentu -D podczas uruchamiania i łącznika danych. Na przykład poniższe polecenie uruchamia oprogramowanie sprzęgające za pomocą pliku konfiguracji MyConfig.properties:

java -classpath myconnector.jar;... -Dconfig=MyConfig.properties MyConnector

Jeśli brakuje tego argumentu, pakiet SDK próbuje uzyskać dostęp do konfiguracji domyślnej. plik o nazwie connector-config.properties.

Utwórz oprogramowanie sprzęgające tożsamości w pełnej synchronizacji za pomocą klasy szablonu

Pakiet Identity Connector SDK zawiera klasę szablonu FullSyncIdentityConnector możesz używać do synchronizowania wszystkich użytkowników i grup z tożsamości z tożsamościami Google. W tej sekcji wyjaśniono, jak korzystać z funkcji Szablon FullSyncIdentityConnector umożliwiający przeprowadzenie pełnej synchronizacji użytkowników i grup na podstawie tożsamości innej niż Google z repozytorium.

Ta sekcja dokumentacji odnosi się do fragmentów kodu z IdentityConnecorSample.java próbka. Ten przykład odczytuje dane użytkownika i grupy Tożsamości z dwóch plików CSV i synchronizuje je z tożsamościami Google.

Wdróż punkt wejścia oprogramowania sprzęgającego

Punktem wejścia oprogramowania sprzęgającego jest Metoda main(). Głównym zadaniem tej metody jest utworzenie instancji Application i wywołaj jej klasę start() do uruchomienia oprogramowania sprzęgającego.

Zanim zadzwonisz application.start() użyj IdentityApplication.Builder klasy do utworzenia instancji Szablon FullSyncIdentityConnector. FullSyncIdentityConnector akceptuje Repository , którego metody zastosujesz. Fragment kodu, który pokazuje, jak wdrożyć metodę main():

IdentityConnectorSample.java
/**
 * This sample connector uses the Cloud Search SDK template class for a full
 * sync connector. In the full sync case, the repository is responsible
 * for providing a snapshot of the complete identity mappings and
 * group rosters. This is then reconciled against the current set
 * of mappings and groups in Cloud Directory.
 *
 * @param args program command line arguments
 * @throws InterruptedException thrown if an abort is issued during initialization
 */
public static void main(String[] args) throws InterruptedException {
  Repository repository = new CsvRepository();
  IdentityConnector connector = new FullSyncIdentityConnector(repository);
  IdentityApplication application = new IdentityApplication.Builder(connector, args).build();
  application.start();
}

W tle pakiet SDK wywołuje metodę initConfig() po wywołaniu metody main() oprogramowania sprzęgającego Application.build Metoda initConfig() wykonuje te zadania:

  1. Wywołuje funkcję Configuation.isInitialized() aby zapewnić, że Configuration nie została zainicjowana.
  2. Inicjuje obiekt Configuration przy użyciu pary klucz-wartość dostarczonej przez Google pary. Każda para klucz-wartość jest przechowywana w pliku ConfigValue w obiekcie Configuration.

Wdrażanie interfejsu Repository

Jedynym celem obiektu Repository jest wykonywanie synchronizację tożsamości repozytoriów z tożsamościami Google. W przypadku użycia funkcji przez szablon, musisz zastąpić tylko określone metody w Repository, aby utworzyć łącznik tożsamości. W przypadku wartości FullTraversalConnector , prawdopodobnie zastąpisz te metody:

  • init() . Aby wykonać konfigurację i zainicjowanie repozytorium tożsamości, zastąp metody init().

  • listUsers() . Aby zsynchronizować wszystkich użytkowników w repozytorium tożsamości z użytkownikami Google, zastąp metodę listUsers().

  • listGroups() . Aby zsynchronizować wszystkie grupy w repozytorium tożsamości z Grupami dyskusyjnymi Google: zastąpić metodę listGroups().

  • (opcjonalnie) Parametr close() . Jeśli chcesz wyczyścić repozytorium, zastąp close() . Ta metoda jest wywoływana raz podczas wyłączania oprogramowania sprzęgającego.

Pobierz niestandardowe parametry konfiguracji

W ramach konfiguracji oprogramowania sprzęgającego musisz pobrać parametrów niestandardowych z parametru Configuration obiektu. To zadanie jest zwykle wykonywane Repository zajęcia init() .

Klasa Configuration ma kilka metod uzyskiwania różnych typów danych z konfiguracji. Każda metoda zwraca błąd ConfigValue obiektu. Następnie użyjesz metody obiektu ConfigValue get() do pobrania rzeczywistej wartości. Ten fragment kodu pokazuje, jak pobrać userMappingCsvPath i Wartość groupMappingCsvPath z obiektu Configuration:

IdentityConnectorSample.java
/**
 * Initializes the repository once the SDK is initialized.
 *
 * @param context Injected context, contains convenienve methods
 *                for building users & groups
 * @throws IOException if unable to initialize.
 */
@Override
public void init(RepositoryContext context) throws IOException {
  log.info("Initializing repository");
  this.context = context;
  userMappingCsvPath = Configuration.getString(
      "sample.usersFile", "users.csv").get().trim();
  groupMappingCsvPath = Configuration.getString(
      "sample.groupsFile", "groups.csv").get().trim();
}

Aby pobrać i przeanalizować parametr zawierający kilka wartości, użyj jednej z funkcji parsery typów klasy Configuration do analizowania danych na części. Ten fragment kodu z oprogramowania sprzęgającego samouczka używa parametru getMultiValue , aby uzyskać listę nazw repozytoriów GitHub:

GithubRepository.java
ConfigValue<List<String>> repos = Configuration.getMultiValue(
    "github.repos",
    Collections.emptyList(),
    Configuration.STRING_PARSER);

Pobierz mapowanie dla wszystkich użytkowników

Zastąp listUsers() w celu pobrania mapowania wszystkich użytkowników z repozytorium tożsamości. Metoda listUsers() akceptuje punkt kontrolny reprezentujący ostatnią tożsamość, która ma być zsynchronizowano. Za jego pomocą można wznowić synchronizację, jeśli proces przerwano. W przypadku każdego użytkownika w repozytorium wykonasz te czynności w metoda listUsers():

  1. Pobierz mapowanie składające się z tożsamości Google i powiązanych elementów zewnętrznych tożsamości.
  2. Zapakuj parę do iteratora zwróconego przez metodę listUsers().

Pobieranie mapowania użytkownika

Ten fragment kodu pokazuje, jak pobrać mapowania tożsamości zapisane w pliku CSV:

IdentityConnectorSample.java
/**
 * Retrieves all user identity mappings for the identity source. For the
 * full sync connector, the repository must provide a complete snapshot
 * of the mappings. This is reconciled against the current mappings
 * in Cloud Directory. All identity mappings returned here are
 * set in Cloud Directory. Any previously mapped users that are omitted
 * are unmapped.
 *
 * The connector does not create new users. All users are assumed to
 * exist in Cloud Directory.
 *
 * @param checkpoint Saved state if paging over large result sets. Not used
 *                   for this sample.
 * @return Iterator of user identity mappings
 * @throws IOException if unable to read user identity mappings
 */
@Override
public CheckpointCloseableIterable<IdentityUser> listUsers(byte[] checkpoint)
    throws IOException {
  List<IdentityUser> users = new ArrayList<>();
  try (Reader in = new FileReader(userMappingCsvPath)) {
    // Read user mappings from CSV file
    CSVParser parser = CSVFormat.RFC4180
        .withIgnoreSurroundingSpaces()
        .withIgnoreEmptyLines()
        .withCommentMarker('#')
        .parse(in);
    for (CSVRecord record : parser.getRecords()) {
      // Each record is in form: "primary_email", "external_id"
      String primaryEmailAddress = record.get(0);
      String externalId = record.get(1);
      if (primaryEmailAddress.isEmpty() || externalId.isEmpty()) {
        // Skip any malformed mappings
        continue;
      }
      log.info(() -> String.format("Adding user %s/%s",
          primaryEmailAddress, externalId));

      // Add the identity mapping
      IdentityUser user = context.buildIdentityUser(
          primaryEmailAddress, externalId);
      users.add(user);
    }
  }
  // ...
}

Pakowanie mapowania użytkownika w iterator

listUsers() zwraca Iterator, a konkretnie CheckpointCloseableIterable, z IdentityUser obiektów. Za pomocą CheckpointClosableIterableImpl.Builder do utworzenia i zwrócenia iteracji. Fragment kodu poniżej pokazuje, i spakować każde mapowanie w listę. Na jego podstawie powstanie iterator. lista:

IdentityConnectorSample.java
CheckpointCloseableIterable<IdentityUser> iterator =
  new CheckpointCloseableIterableImpl.Builder<IdentityUser>(users)
      .setHasMore(false)
      .setCheckpoint((byte[])null)
      .build();

Pobierz grupę

Zastąp listGroups() aby pobrać wszystkie grupy i ich członków z Twojej tożsamości z repozytorium. Metoda listGroups() akceptuje punkt kontrolny reprezentujący ostatnie tożsamość do synchronizacji. Można go użyć do wznowienia synchronizacji, jeśli może zostać przerwany. Dla każdego użytkownika w repozytorium wykonasz te czynności kroki metody listGroups():

  1. Pobierz grupę i jej członków.
  2. Umieść każdą grupę i członków w iteratorze zwróconym przez Metoda listGroups().

Pobieranie tożsamości grupy

Poniższy fragment kodu pokazuje, jak pobrać grupy i członków zapisane w pliku CSV:

IdentityConnectorSample.java
/**
 * Retrieves all group rosters for the identity source. For the
 * full sync connector, the repository must provide a complete snapshot
 * of the rosters. This is reconciled against the current rosters
 * in Cloud Directory. All groups and members  returned here are
 * set in Cloud Directory. Any previously created groups or members
 * that are omitted are removed.
 *
 * @param checkpoint Saved state if paging over large result sets. Not used
 *                   for this sample.
 * @return Iterator of group rosters
 * @throws IOException if unable to read groups
 */    @Override
public CheckpointCloseableIterable<IdentityGroup> listGroups(byte[] checkpoint)
    throws IOException {
  List<IdentityGroup> groups = new ArrayList<>();
  try (Reader in = new FileReader(groupMappingCsvPath)) {
    // Read group rosters from CSV
    CSVParser parser = CSVFormat.RFC4180
        .withIgnoreSurroundingSpaces()
        .withIgnoreEmptyLines()
        .withCommentMarker('#')
        .parse(in);
    for (CSVRecord record : parser.getRecords()) {
      // Each record is in form: "group_id", "member"[, ..., "memberN"]
      String groupName = record.get(0);
      log.info(() -> String.format("Adding group %s", groupName));
      // Parse the remaining columns as group memberships
      Supplier<Set<Membership>> members = new MembershipsSupplier(record);
      IdentityGroup group = context.buildIdentityGroup(groupName, members);
      groups.add(group);
    }
  }
  // ...

}

Umieszczanie grupy i członków w iteratorze

listGroups() zwraca Iterator, a konkretnie CheckpointCloseableIterable, z IdentityGroup obiektów. Za pomocą CheckpointClosableIterableImpl.Builder do utworzenia i zwrócenia iteracji. Fragment kodu poniżej pokazuje, łączenie każdej grupy i członków w listę, a następnie stworzenie iteratora na podstawie tej listy lista:

IdentityConnectorSample.java
CheckpointCloseableIterable<IdentityGroup> iterator =
   new CheckpointCloseableIterableImpl.Builder<IdentityGroup>(groups)
      .setHasMore(false)
      .setCheckpoint((byte[])null)
      .build();

Dalsze kroki

Oto kilka kolejnych kroków, które możesz podjąć: