یک اتصال دهنده هویت ایجاد کنید

به طور پیش‌فرض، Google Cloud Search فقط هویت‌های Google ذخیره شده در فهرست Google Cloud (کاربران و گروه‌ها) را شناسایی می‌کند. رابط‌های هویت برای همگام‌سازی هویت شرکت شما با هویت‌های Google مورد استفاده توسط Google Cloud Search استفاده می‌شوند.

Google گزینه های زیر را برای توسعه اتصال دهنده های هویت ارائه می دهد:

  • Identity Connector SDK. این گزینه برای توسعه دهندگانی است که به زبان برنامه نویسی جاوا برنامه نویسی می کنند. Identity Connector SDK یک بسته بندی در اطراف REST API است که به شما امکان می دهد به سرعت کانکتور ایجاد کنید. برای ایجاد یک رابط هویت با استفاده از SDK، به ایجاد رابط هویت با استفاده از SDK اتصال هویت مراجعه کنید.

  • یک REST API و کتابخانه های API سطح پایین. این گزینه‌ها برای توسعه‌دهندگانی هستند که ممکن است در جاوا برنامه‌نویسی نکنند یا پایگاه کدشان بهتر است یک REST API یا یک کتابخانه را در خود جای دهد. برای ایجاد یک رابط هویتی با استفاده از REST API، برای اطلاعات در مورد کاربران نقشه برداری به Directory API: User Accounts و برای اطلاعات در مورد گروه های نقشه برداری Cloud Identity Documentation مراجعه کنید.

با استفاده از Identity Connector SDK یک رابط هویت ایجاد کنید

یک اتصال دهنده هویت معمولی وظایف زیر را انجام می دهد:

  1. کانکتور را پیکربندی کنید.
  2. همه کاربران را از سیستم هویت سازمانی خود بازیابی کنید و آنها را برای همگام سازی با هویت های Google به Google ارسال کنید.
  3. همه گروه ها را از سیستم هویت سازمانی خود بازیابی کنید و آنها را برای همگام سازی با هویت های Google به Google ارسال کنید.

وابستگی ها را تنظیم کنید

برای استفاده از SDK باید وابستگی های خاصی را در فایل ساخت خود قرار دهید. برای مشاهده وابستگی های محیط ساخت خود، روی یک تب زیر کلیک کنید:

ماون

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

گریدل

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

پیکربندی کانکتور خود را ایجاد کنید

هر کانکتور دارای یک فایل پیکربندی است که حاوی پارامترهایی است که توسط کانکتور استفاده می شود، مانند شناسه مخزن شما. پارامترها به عنوان جفت کلید-مقدار تعریف می شوند، مانند api.sourceId= 1234567890abcdef .

Google Cloud Search SDK حاوی چندین پارامتر پیکربندی ارائه شده توسط Google است که توسط همه رابط‌ها استفاده می‌شود. شما باید پارامترهای ارائه شده توسط Google را در فایل پیکربندی خود اعلام کنید:

  • برای اتصال محتوا، باید api.sourceId و api.serviceAccountPrivateKeyFile را اعلام کنید زیرا این پارامترها مکان مخزن شما و کلید خصوصی مورد نیاز برای دسترسی به مخزن را مشخص می کنند.
  • برای یک رابط هویت، باید api.identitySourceId اعلام کنید زیرا این پارامتر مکان منبع هویت خارجی شما را مشخص می کند. اگر کاربران را همگام‌سازی می‌کنید، باید api.customerId به‌عنوان شناسه منحصربه‌فرد برای حساب Google Workspace شرکت خود نیز اعلام کنید.

مگر اینکه بخواهید مقادیر پیش‌فرض سایر پارامترهای ارائه‌شده توسط Google را لغو کنید، لازم نیست آنها را در فایل پیکربندی خود اعلام کنید. برای اطلاعات بیشتر در مورد پارامترهای پیکربندی ارائه شده توسط Google، مانند نحوه تولید شناسه ها و کلیدهای خاص، به پارامترهای پیکربندی ارائه شده توسط Google مراجعه کنید.

شما همچنین می توانید پارامترهای مخزن خاص خود را برای استفاده در فایل پیکربندی خود تعریف کنید.

فایل پیکربندی را به کانکتور ارسال کنید

config ویژگی سیستم را برای ارسال فایل پیکربندی به کانکتور خود تنظیم کنید. می‌توانید با استفاده از آرگومان -D هنگام راه‌اندازی کانکتور، ویژگی را تنظیم کنید. به عنوان مثال، دستور زیر کانکتور را با فایل پیکربندی MyConfig.properties شروع می کند:

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

اگر این آرگومان وجود نداشته باشد، SDK سعی می کند به یک فایل پیکربندی پیش فرض به نام connector-config.properties دسترسی پیدا کند.

با استفاده از یک کلاس الگو، یک رابط هویت همگام کامل ایجاد کنید

Identity Connector SDK شامل یک کلاس الگوی FullSyncIdentityConnector است که می‌توانید از آن برای همگام‌سازی همه کاربران و گروه‌ها از مخزن هویت با هویت‌های Google استفاده کنید. این بخش نحوه استفاده از الگوی FullSyncIdentityConnector را برای همگام‌سازی کامل کاربران و گروه‌ها از یک مخزن هویت غیر Google توضیح می‌دهد.

این بخش از اسناد به قطعات کد از نمونه IdentityConnecorSample.java اشاره دارد. این نمونه هویت های کاربر و گروه را از دو فایل CSV می خواند و آنها را با شناسه های گوگل همگام می کند.

نقطه ورودی کانکتور را پیاده سازی کنید

نقطه ورود به یک کانکتور روش main() است. وظیفه اصلی این متد ایجاد یک نمونه از کلاس Application و فراخوانی متد start() آن برای اجرای کانکتور است.

قبل از فراخوانی application.start() از کلاس IdentityApplication.Builder برای نمونه سازی قالب FullSyncIdentityConnector استفاده کنید. FullSyncIdentityConnector یک شی Repository را می پذیرد که روش های آن را پیاده سازی خواهید کرد. قطعه کد زیر نحوه پیاده سازی متد 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();
}

در پشت صحنه، SDK متد initConfig() را پس از فراخوانی متد main() کانکتور شما Application.build را فراخوانی می کند. متد initConfig() وظایف زیر را انجام می دهد:

  1. متد Configuation.isInitialized() را فراخوانی می کند تا مطمئن شود که Configuration اولیه نشده است.
  2. یک شی Configuration را با جفت های کلید-مقدار ارائه شده توسط Google راه اندازی می کند. هر جفت کلید-مقدار در یک شی ConfigValue در شی Configuration ذخیره می شود.

رابط Repository را پیاده سازی کنید

تنها هدف شی Repository انجام همگام‌سازی هویت‌های مخزن با هویت‌های Google است. هنگام استفاده از یک الگو، فقط باید روش‌های خاصی را در رابط Repository لغو کنید تا یک رابط هویت ایجاد کنید. برای FullTraversalConnector ، احتمالاً روش‌های زیر را لغو خواهید کرد:

  • init() . برای انجام هرگونه راه اندازی و مقداردهی اولیه مخزن هویت، متد ()init را لغو کنید.

  • متد listUsers() . برای همگام سازی همه کاربران موجود در مخزن هویت با کاربران Google، روش listUsers() را لغو کنید.

  • متد listGroups() . برای همگام‌سازی همه گروه‌های موجود در مخزن هویت با Google Groups، روش listGroups() را لغو کنید.

  • (اختیاری) متد close() . اگر نیاز به پاکسازی مخزن دارید، متد close() را لغو کنید. این روش یک بار در هنگام خاموش شدن کانکتور فراخوانی می شود.

پارامترهای پیکربندی سفارشی را دریافت کنید

به عنوان بخشی از مدیریت پیکربندی کانکتور خود، باید هر پارامتر سفارشی را از شی Configuration دریافت کنید. این کار معمولاً در متد init() کلاس Repository انجام می شود.

کلاس Configuration چندین روش برای دریافت انواع داده های مختلف از یک پیکربندی دارد. هر متد یک شی ConfigValue را برمی گرداند. سپس از متد get() شی ConfigValue برای بازیابی مقدار واقعی استفاده خواهید کرد. قطعه زیر نحوه بازیابی مقدار userMappingCsvPath و groupMappingCsvPath را از یک شی 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();
}

برای به دست آوردن و تجزیه یک پارامتر حاوی چندین مقدار، از یکی از تجزیه کننده های نوع کلاس Configuration برای تجزیه داده ها به تکه های گسسته استفاده کنید. قطعه زیر، از رابط آموزش، از متد getMultiValue برای دریافت لیستی از نام‌های مخزن GitHub استفاده می‌کند:

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

نقشه برداری را برای همه کاربران دریافت کنید

برای بازیابی نگاشت برای همه کاربران از مخزن هویت شما listUsers() را لغو کنید. متد listUsers() یک چک پوینت را می پذیرد که نشان دهنده آخرین هویتی است که باید همگام سازی شود. اگر فرآیند قطع شود، می‌توان از نقطه بازرسی برای از سرگیری همگام‌سازی استفاده کرد. برای هر کاربر در مخزن خود، این مراحل را در متد listUsers() انجام خواهید داد:

  1. یک نقشه برداری متشکل از هویت Google و هویت خارجی مرتبط دریافت کنید.
  2. جفت را در یک تکرار کننده که توسط متد listUsers() برگردانده شده است، بسته بندی کنید.

دریافت نقشه کاربری

قطعه کد زیر نحوه بازیابی نگاشت هویت ذخیره شده در یک فایل 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);
    }
  }
  // ...
}

نگاشت کاربر را در یک تکرار کننده بسته بندی کنید

متد listUsers() یک Iterator ، به ویژه یک CheckpointCloseableIterable ، از اشیاء IdentityUser را برمی گرداند. می توانید از کلاس CheckpointClosableIterableImpl.Builder برای ساختن و برگرداندن یک تکرار کننده استفاده کنید. قطعه کد زیر نحوه بسته بندی هر نگاشت را در لیست نشان می دهد و تکرار کننده از آن لیست ساخته می شود:

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

گروه بگیر

برای بازیابی همه گروه‌ها و اعضای آن‌ها از مخزن هویت خود listGroups() لغو کنید. متد listGroups() یک چک پوینت را می پذیرد که نشان دهنده آخرین هویتی است که باید همگام سازی شود. اگر فرآیند قطع شود، می‌توان از نقطه بازرسی برای از سرگیری همگام‌سازی استفاده کرد. برای هر کاربر در مخزن خود، این مراحل را در متد listGroups() انجام خواهید داد:

  1. گروه و اعضای آن را دریافت کنید.
  2. هر گروه و اعضا را در یک تکرار کننده که توسط متد listGroups() برگردانده شده است، بسته بندی کنید.

هویت گروه را بدست آورید

قطعه کد زیر نحوه بازیابی گروه ها و اعضای ذخیره شده در یک فایل 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);
    }
  }
  // ...

}

گروه و اعضا را در یک تکرار کننده بسته بندی کنید

متد listGroups() یک Iterator ، به ویژه یک CheckpointCloseableIterable ، از اشیاء IdentityGroup را برمی گرداند. می توانید از کلاس CheckpointClosableIterableImpl.Builder برای ساختن و برگرداندن یک تکرار کننده استفاده کنید. قطعه کد زیر نحوه بسته بندی هر گروه و اعضا را در یک لیست و ساختن تکرار کننده از آن لیست نشان می دهد:

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

مراحل بعدی

در اینجا چند مرحله بعدی وجود دارد که ممکن است بردارید: