Kimlik bağlayıcı oluşturma

Varsayılan olarak, Google Cloud Search yalnızca şurada depolanan Google kimliklerini tanır: Google Cloud Directory (kullanıcılar ve gruplar). Kimlik bağlayıcıları şu amaçlarla kullanılır: kuruluşunuzun kimliklerini Google Cloud Search tarafından kullanılan Google kimlikleriyle senkronize edin.

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

  • Identity Connector SDK'sı. Bu seçenek, programlama dilinde çalıştırmaktadır. Identity Connector SDK'sı bir sarmalayıcıdır REST API'yi temel alarak hızlıca bağlayıcı oluşturabilirsiniz. Bir SDK'yı kullanan kimlik bağlayıcısı için Identity Connector SDK'sını kullanarak kimlik bağlayıcısı oluşturun.

  • Alt düzey bir REST API ve API kitaplıkları. Bu seçenekler, programlama dili Java'da olmayabilir veya kod tabanı bir REST API veya kitaplık. REST API kullanarak kimlik bağlayıcısı oluşturmak için - Directory API: Kullanıcı Hesapları: ve Arkadaş Bitkiler Projesi için Cloud Identity belgeleri: eşleme grupları hakkında daha fazla bilgi edinin.

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

Tipik bir kimlik bağlayıcısı aşağıdaki görevleri gerçekleştirir:

  1. Bağlayıcıyı yapılandırın.
  2. Kurumsal kimlik sisteminizden tüm kullanıcıları alın ve Google kimlikleriyle senkronizasyon için Google.
  3. Kurumsal kimlik sisteminizden tüm grupları alın ve şuraya gönderin: Google kimlikleriyle senkronizasyon için Google.

Bağımlılıkları belirleme

SDK'yı kullanmak için derleme dosyanıza belirli bağımlılıkları eklemeniz gerekir. Sonraki slayta geçin bağımlılıklarını görüntülemek için aşağıdaki sekmelerden birini tıklayın:

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şturma

Her bağlayıcının, bağlayıcınızın kimliğini girin. Parametreler şu şekilde tanımlanır: anahtar/değer çiftleri: api.sourceId=1234567890abcdef.

Google Cloud Search SDK'sı, Google tarafından sağlanan çeşitli yapılandırma içerir tüm bağlayıcılar tarafından kullanılan parametrelerdir. Aşağıdakileri beyan etmeniz gerekir: Yapılandırma dosyanızdaki Google tarafından sağlanan parametreler:

  • İçerik bağlayıcısı için api.sourceId ve Bu parametreler konumu tanımladığından api.serviceAccountPrivateKeyFile deponuz ve özel anahtarınız olabilir.
  • Kimlik bağlayıcısı için api.identitySourceId öğesini bu olarak tanımlamanız gerekir parametresi, harici kimlik kaynağınızın konumunu tanımlar. Şu durumda: kullanıcılar senkronize ediliyorsa api.customerId öğesini de şunlar için benzersiz kimlik olarak beyan etmeniz gerekir: kuruluşunuzun Google Workspace hesabıyla ilişkilidir.

Google tarafından sağlanan diğer parametrelerini yapılandırma dosyanızda bildirmeniz gerekmez. Google'ın sağladığı yapılandırma parametreleri (ör. hakkında bilgi edinmek için Google'ın sağladığı yapılandırma parametreleri.

Ayrıca yapılandırma dosyası.

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

Yapılandırma dosyasınıconfig bağlayıcı. Özelliği, başlatırken -D bağımsız değişkenini kullanarak ayarlayabilirsiniz bağlayıcı. Örneğin, aşağıdaki komut, MyConfig.properties yapılandırma dosyasıyla:

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

Bu bağımsız değişken eksikse SDK, varsayılan bir yapılandırmaya erişmeye çalışır connector-config.properties adlı dosya.

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

Identity Connector SDK'sı FullSyncIdentityConnector şablon sınıfı içeriyor kimlikten tüm kullanıcıları ve grupları senkronize etmek için kullanabilirsiniz Google kimliklerine sahip bir depo hizmeti sunar. Bu bölümde, Google dışı bir kimlikteki kullanıcılar ve grupların tam senkronizasyonunu gerçekleştirmek için FullSyncIdentityConnector şablonu depodur.

Belgelerin bu bölümü, IdentityConnecorSample.java örnek. Bu örnek kullanıcı ve grubu okur kimlikler iki CSV dosyası arasından seçilir ve Google kimlikleriyle senkronize edilir.

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

Bağlayıcının giriş noktası main() yöntemini çağırın. Bu yöntemin birincil görevi, yeni Application sınıfını çağırarak start() yöntemini kullanın.

Aramadan önce application.start(), her bir arama terimi için IdentityApplication.Builder sınıfını kullanarak FullSyncIdentityConnector şablon. FullSyncIdentityConnector şunları kabul ediyor: Repository nesnesini ifade eder. Aşağıdaki kod snippet'i, main() yönteminin nasıl uygulanacağını gösterir:

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

Arka planda SDK, initConfig() yöntemini çağırınmain() Application.build. initConfig() yöntemi aşağıdaki görevleri yerine getirir:

  1. Configuation.isInitialized() yöntemini kullanan Configuration henüz başlatılmadı.
  2. Google'ın sağladığı anahtar/değer çiftiyle bir Configuration nesnesini başlatır çiftler. Her anahtar/değer çifti ConfigValue Configuration nesnesinin içindeki bir nesnedir.

Repository arayüzünü uygulama

Repository nesnesinin tek amacı Google kimlikleri ile kod deposu kimliklerini senkronize etme. Bunu kullanırken yalnızca şablondaki belirli yöntemleri geçersiz kılmanız yeterlidir. Repository arayüzünü kullanarak kimlik bağlayıcısı oluşturun. FullTraversalConnector , aşağıdaki yöntemleri büyük olasılıkla geçersiz kılarsınız:

  • İlgili içeriği oluşturmak için kullanılan init() yöntemidir. Herhangi bir kimlik deposu kurulumu ve başlatması gerçekleştirmek için `init() yöntemidir.

  • İlgili içeriği oluşturmak için kullanılan listUsers() yöntemidir. Kimlik deposundaki tüm kullanıcıları Google kullanıcılarıyla senkronize etmek için listUsers() yöntemi.

  • İlgili içeriği oluşturmak için kullanılan listGroups() yöntemidir. Kimlik deposundaki tüm grupları Google Gruplar ile senkronize etmek için: listGroups() yöntemini geçersiz kıl.

  • (isteğe bağlı) close() yöntemidir. Depo temizleme işlemi gerçekleştirmeniz gerekiyorsa close() yönergesini geçersiz kılın yöntemidir. Bu yöntem, bağlayıcının kapatılması sırasında bir kez çağrılır.

Özel yapılandırma parametrelerini alma

Bağlayıcınızın yapılandırmasınıın bir parçası olarak, özel parametrelerini içeren Configuration nesnesini tanımlayın. Bu görev genellikle Repository sınıfın init() yöntemidir.

Configuration sınıfı, farklı veri türlerini almak için çeşitli yöntemler sunar. kaldıracaktır. Her yöntem, ConfigValue nesnesini tanımlayın. Daha sonra ConfigValue nesnesinin get() yöntemini kullanın. Aşağıdaki snippet'te userMappingCsvPath ve üzeri değerlerin nasıl alınacağı gösterilmektedir Bir Configuration nesnesinden groupMappingCsvPath değeri:

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

Birkaç değer içeren bir parametreyi almak ve ayrıştırmak için Configuration sınıfının tür ayrıştırıcıları, verileri ayrı parçalara ayrıştırır. Eğitim bağlayıcısında bulunan aşağıdaki snippet, getMultiValue yöntemini kullanarak GitHub deposu adlarının listesini almalısınız:

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

Geçersiz kıl listUsers() kullanarak kimlik deponuzdaki tüm kullanıcıların eşlemesini alabilirsiniz. İlgili içeriği oluşturmak için kullanılan listUsers() yöntemi, kontrol edilecek son kimliği temsil eden bir kontrol senkronize edildi. İşlem aşağıdaki durumlarda senkronizasyonu devam ettirmek için kontrol noktası kullanılabilir: kesintiye uğrar. Deponuzdaki her kullanıcı için bu adımları şurada gerçekleştireceksiniz: listUsers() yöntemi:

  1. Google kimliği ve ilişkilendirilmiş harici verilerden oluşan bir eşleme alın. kimliği.
  2. Çifti, listUsers() yöntemi tarafından döndürülen bir iteratörde paketleyin.

Kullanıcı eşleme alma

Aşağıdaki kod snippet'i, kimlik eşlemelerinin nasıl alınacağını gösterir. saklanır:

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 iteratörde paketleme

listUsers() yöntemi bir Iterator değeri döndürür, özellikle de CheckpointCloseableIterable, / IdentityUser nesneler'i tıklayın. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için CheckpointClosableIterableImpl.Builder sınıfını kullanır. Aşağıdaki kod snippet'i, sitenizin her eşlemeyi liste halinde paketlemek için bu öğeden yinelemeyi derleyin liste:

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

Grup al

Geçersiz kıl listGroups() ve tüm grupları ve bu grupların üyelerini kimliğinizden almak için depodur. listGroups() yöntemi, son senkronize edilecek. Kontrol noktası, şu durumlarda senkronizasyonu devam ettirmek için kullanılabilir: işlemi kesintiye uğratabilir. Deponuzdaki her kullanıcı için şu işlemleri yapacaksınız: listGroups() yöntemindeki adımlar:

  1. Grubu ve üyelerini alın.
  2. Her grubu ve üyeleri listGroups() yöntemini çağırın.

Grup kimliğini alma

Aşağıdaki kod snippet'i, grupların ve üyelerin nasıl alınacağını gösterir. saklanır:

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 iteratörde paketle

listGroups() yöntemi bir Iterator değeri döndürür, özellikle de CheckpointCloseableIterable, / IdentityGroup nesneler'i tıklayın. URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için CheckpointClosableIterableImpl.Builder sınıfını kullanır. Aşağıdaki kod snippet'i, sitenizin her grubu ve üyeleri bir liste halinde paketleyip yinelemeyi bu liste halinden liste:

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

Sonraki Adımlar

Atabileceğiniz sonraki adımlardan bazıları şunlardır: