একটি পরিচয় সংযোগকারী তৈরি করুন

ডিফল্টরূপে, Google ক্লাউড অনুসন্ধান শুধুমাত্র Google ক্লাউড ডিরেক্টরিতে (ব্যবহারকারী এবং গোষ্ঠী) সংরক্ষিত Google পরিচয়গুলিকে স্বীকৃতি দেয়৷ আইডেন্টিটি কানেক্টরগুলি আপনার এন্টারপ্রাইজের পরিচয়গুলিকে Google ক্লাউড অনুসন্ধান দ্বারা ব্যবহৃত Google পরিচয়গুলির সাথে সিঙ্ক করতে ব্যবহৃত হয়৷

Google পরিচয় সংযোগকারীর বিকাশের জন্য নিম্নলিখিত বিকল্পগুলি প্রদান করে:

আইডেন্টিটি কানেক্টর 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 ক্লাউড অনুসন্ধান 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 পরিচয়ের সাথে পরিচয় সংগ্রহস্থল থেকে সমস্ত ব্যবহারকারী এবং গোষ্ঠীকে সিঙ্ক করতে ব্যবহার করতে পারেন৷ এই বিভাগটি ব্যাখ্যা করে যে কীভাবে একটি নন-Google আইডেন্টিটি রিপোজিটরি থেকে ব্যবহারকারী এবং গোষ্ঠীগুলির সম্পূর্ণ সিঙ্ক করতে FullSyncIdentityConnector টেমপ্লেট ব্যবহার করতে হয়।

ডক্সের এই বিভাগটি IdentityConnecorSample.java নমুনা থেকে কোড স্নিপেটগুলিকে নির্দেশ করে৷ এই নমুনা দুটি CSV ফাইল থেকে ব্যবহারকারী এবং গোষ্ঠীর পরিচয় পড়ে এবং সেগুলিকে Google পরিচয়ের সাথে সিঙ্ক করে৷

সংযোগকারীর এন্ট্রি পয়েন্ট প্রয়োগ করুন

একটি সংযোগকারীর এন্ট্রি পয়েন্ট হল main() পদ্ধতি। এই পদ্ধতির প্রাথমিক কাজ হল Application ক্লাসের একটি উদাহরণ তৈরি করা এবং সংযোগকারী চালানোর জন্য এর start() পদ্ধতি চালু করা।

application.start() কল করার আগে, FullSyncIdentityConnector টেমপ্লেটটি চালু করতে IdentityApplication.Builder ক্লাসটি ব্যবহার করুন। 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 আপনার সংযোগকারীর main() পদ্ধতি Application.build কল করার পরে initConfig() পদ্ধতিতে কল করে। initConfig() পদ্ধতি নিম্নলিখিত কাজগুলি সম্পাদন করে:

  1. Configuration আরম্ভ করা হয়নি তা নিশ্চিত করতে Configuation.isInitialized() পদ্ধতিতে কল করে।
  2. Google-প্রদত্ত কী-মান জোড়া দিয়ে একটি Configuration অবজেক্ট শুরু করে। প্রতিটি কী-মান জোড়া Configuration অবজেক্টের মধ্যে একটি ConfigValue অবজেক্টে সংরক্ষণ করা হয়।

Repository ইন্টারফেস বাস্তবায়ন

Repository অবজেক্টের একমাত্র উদ্দেশ্য হল গুগুল আইডেন্টিটির সাথে রিপোজিটরি আইডেন্টিটি সিঙ্ক করা। একটি টেমপ্লেট ব্যবহার করার সময়, আপনাকে একটি পরিচয় সংযোগকারী তৈরি করতে Repository ইন্টারফেসের মধ্যে শুধুমাত্র কিছু পদ্ধতি ওভাররাইড করতে হবে। FullTraversalConnector এর জন্য, আপনি সম্ভবত নিম্নলিখিত পদ্ধতিগুলিকে ওভাররাইড করবেন:

  • init() পদ্ধতি। কোনো পরিচয় সংগ্রহস্থল সেট-আপ এবং আরম্ভ করার জন্য, `init() পদ্ধতি ওভাররাইড করুন।

  • listUsers() পদ্ধতি। আইডেন্টিটি রিপোজিটরিতে থাকা সমস্ত ব্যবহারকারীকে Google ব্যবহারকারীদের সাথে সিঙ্ক করতে, listUsers() পদ্ধতিটি ওভাররাইড করুন।

  • listGroups() পদ্ধতি। আইডেন্টিটি রিপোজিটরিতে থাকা সমস্ত গ্রুপকে Google গ্রুপের সাথে সিঙ্ক করতে, listGroups() পদ্ধতিটি ওভাররাইড করুন।

  • (ঐচ্ছিক) close() পদ্ধতি। আপনি যদি সংগ্রহস্থল পরিষ্কার করতে চান, তাহলে close() পদ্ধতিটি ওভাররাইড করুন। সংযোগকারী বন্ধ করার সময় এই পদ্ধতিটি একবার বলা হয়।

কাস্টম কনফিগারেশন পরামিতি পান

আপনার সংযোগকারীর কনফিগারেশন পরিচালনার অংশ হিসাবে, আপনাকে Configuration অবজেক্ট থেকে যেকোনো কাস্টম প্যারামিটার পেতে হবে। এই কাজটি সাধারণত Repository ক্লাসের init() পদ্ধতিতে করা হয়।

Configuration ক্লাসে একটি কনফিগারেশন থেকে বিভিন্ন ধরনের ডেটা পাওয়ার জন্য বিভিন্ন পদ্ধতি রয়েছে। প্রতিটি পদ্ধতি একটি ConfigValue অবজেক্ট প্রদান করে। তারপরে আপনি প্রকৃত মান পুনরুদ্ধার করতে ConfigValue অবজেক্টের get() পদ্ধতি ব্যবহার করবেন। নিম্নলিখিত স্নিপেট দেখায় কিভাবে একটি Configuration বস্তু থেকে userMappingCsvPath এবং groupMappingCsvPath মান পুনরুদ্ধার করতে হয়:

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 ক্লাসের টাইপ পার্সারগুলির মধ্যে একটি ব্যবহার করে ডেটাকে পৃথক খণ্ডে পার্স করুন। টিউটোরিয়াল সংযোগকারী থেকে নিম্নলিখিত স্নিপেটটি GitHub সংগ্রহস্থলের নামের তালিকা পেতে getMultiValue পদ্ধতি ব্যবহার করে:

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() পদ্ধতি IdentityUser অবজেক্টের একটি Iterator , বিশেষ করে একটি CheckpointCloseableIterable প্রদান করে। আপনি একটি পুনরাবৃত্তিকারী তৈরি করতে এবং ফেরত দিতে 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() পদ্ধতি IdentityGroup অবজেক্টের একটি Iterator , বিশেষ করে একটি CheckpointCloseableIterable প্রদান করে। আপনি একটি পুনরাবৃত্তিকারী তৈরি করতে এবং ফেরত দিতে CheckpointClosableIterableImpl.Builder ক্লাস ব্যবহার করতে পারেন। নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে প্রতিটি গ্রুপ এবং সদস্যদের একটি তালিকায় প্যাকেজ করতে হয় এবং সেই তালিকা থেকে পুনরাবৃত্তিকারী তৈরি করতে হয়:

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

পরবর্তী পদক্ষেপ

এখানে কয়েকটি পরবর্তী পদক্ষেপ রয়েছে যা আপনি নিতে পারেন: