Kimlik bağlayıcı oluşturma

Google Cloud Search, varsayılan olarak yalnızca Google Cloud Directory'deki Google kimliklerini tanır. Kurumsal kimlikleri, Cloud Search'ün kullandığı Google kimlikleriyle senkronize etmek için kimlik bağlayıcıları kullanın.

Google, kimlik bağlayıcıları geliştirmek için şu seçenekleri sunar:

Identity Connector SDK'sını kullanarak bir kimlik bağlayıcısı oluşturma

Tipik bir kimlik bağlayıcı şu görevleri yerine getirir:

  1. Bağlayıcıyı yapılandırır.
  2. Kimlik sisteminizdeki kullanıcıları alır ve Google'a gönderir.
  3. Kimlik sisteminizdeki grupları alır ve Google'a gönderir.

Bağımlılıkları ayarlama

Bu bağımlılıkları derleme dosyanıza ekleyin.

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'

Bağlayıcı yapılandırmanızı oluşturun

Her bağlayıcı, depo kimliğiniz gibi parametreler için bir yapılandırma dosyası kullanır. Parametreleri anahtar-değer çiftleri olarak tanımlayın. Örneğin, api.sourceId=1234567890abcdef.

Google Cloud Search SDK, tüm bağlayıcılar için Google tarafından sağlanan parametreleri içerir. Yapılandırma dosyanızda aşağıdakileri belirtmeniz gerekir:

  • İçerik bağlayıcı: api.sourceId ve api.serviceAccountPrivateKeyFile öğelerini beyan edin. Bunlar, deponuzu ve erişim için gereken özel anahtarı tanımlar.
  • Kimlik bağlayıcı: Harici kimlik kaynağınızı tanımlamak için api.identitySourceId öğesini bildirin. Kullanıcı senkronizasyonu için api.customerId (Google Workspace hesabınızın benzersiz kimliği) değerini de beyan edin.

Diğer Google tarafından sağlanan parametreleri yalnızca varsayılan değerlerini geçersiz kılmak için bildirin. Kimlik ve anahtar oluşturma hakkında ayrıntılı bilgi için Google tarafından sağlanan parametreler başlıklı makaleyi inceleyin.

Yapılandırma dosyanızda depoya özgü parametreler de tanımlayabilirsiniz.

Yapılandırma dosyasını bağlayıcıya iletme

Yapılandırma dosyasını iletmek için config sistem özelliğini ayarlayın. Bağlayıcıyı başlatırken -D argümanını kullanın. Örneğin:

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

Bu bağımsız değişkeni atlarsanız SDK, yerel dizinde connector-config.properties adlı bir dosyayı kullanmaya çalışır.

Şablon sınıfı kullanarak tam senkronizasyon kimlik bağlayıcısı oluşturma

SDK, tüm kullanıcıları ve grupları deponuzdan senkronize etmek için bir FullSyncIdentityConnector şablonu içerir. Bu bölümde, özelliğin nasıl kullanılacağı açıklanmaktadır.

Bu bölümde, kimlikleri CSV dosyalarından okuyan IdentityConnectorSample.java örneğindeki koddan bahsedilmektedir.

Bağlayıcı giriş noktasını uygulama

Giriş noktası main() yöntemidir. Application örneği oluşturur ve bağlayıcıyı çalıştırmak için start() işlevini çağırır.

application.start()'ı aramadan önce FullSyncIdentityConnector şablonunu oluşturmak için IdentityApplication.Builder'ı kullanın.

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();
}

SDK, initConfig() yöntem çağrılarınızdan sonra main() yöntemini çağırır Application.build(). initConfig() yöntemi:

  1. Configuration öğesinin daha önce başlatılmadığından emin olun.
  2. Configuration nesnesini Google tarafından sağlanan anahtar/değer çiftleriyle başlatır.

Depo arayüzünü uygulama

Repository nesnesi, depo kimliklerini Google kimlikleriyle senkronize eder. Şablon kullanırken yalnızca belirli yöntemleri geçersiz kılmanız gerekir. FullSyncIdentityConnector için şu yöntemleri geçersiz kılın:

  • init(): Kurulum ve başlatma için.
  • listUsers(): Tüm kullanıcıları senkronize etmek için.
  • listGroups(): Tüm grupları senkronize etmek için.
  • (İsteğe bağlı) close(): Kapatma sırasında temizlik için.

Özel yapılandırma parametrelerini alma

Özel parametreleri Configuration nesnesinden (genellikle init() yönteminde) alın. Aşağıdaki snippet'te CSV yollarının nasıl alınacağı gösterilmektedir:

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();
}

Birden fazla değer içeren bir parametreyi almak ve ayrıştırmak için verileri ayrı parçalar halinde ayrıştırmak üzere Configuration sınıfının tür ayrıştırıcılarından birini kullanın. Eğitim bağlayıcısından alınan aşağıdaki snippet, GitHub depo adlarının listesini almak için getMultiValue yöntemini kullanır:

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

Tüm kullanıcılar için eşlemeyi alma

Kullanıcı eşlemelerini almak için listUsers() değerini geçersiz kılın. Bu yöntem, kesintiye uğraması durumunda senkronizasyona devam etmek için bir kontrol noktası kabul eder. Her kullanıcı için:

  1. Google kimliği ile harici kimlik arasındaki eşlemeyi alın.
  2. Çifti, listUsers() tarafından döndürülen yineleyiciye paketleyin.

Kullanıcı eşlemesi alma

Bu snippet, kimlik eşlemelerinin bir CSV dosyasından nasıl alınacağını gösterir:

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);
    }
  }
  // ...
}

Kullanıcı eşlemesini bir yineleyiciye paketleme

listUsers() yöntemi, CheckpointCloseableIterable IdentityUser nesneleri döndürür.

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

Grup alma

Grupları ve üyelerini almak için listGroups() değerini geçersiz kılın. Bu yöntem, kontrol noktası kabul eder. Her grup için:

  1. Grubu ve üyelerini alır.
  2. Bunları listGroups() tarafından döndürülen yineleyiciye paketleyin.

Grup kimliğini alma

Bu snippet, grupları ve üyeleri bir CSV dosyasından almayı gösterir:

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);
    }
  }
  // ...

}

Grubu ve üyeleri bir yineleyiciye paketleme

listGroups() yöntemi, IdentityGroup nesnelerinin CheckpointCloseableIterable değerini döndürür.

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

Sonraki Adımlar