पहचान कनेक्टर बनाएं

डिफ़ॉल्ट रूप से, Google Cloud Search सिर्फ़ यहां सेव की गई Google की पहचानों की पहचान करता है Google Cloud डायरेक्ट्री (उपयोगकर्ता और ग्रुप). आइडेंटिटी कनेक्टर का इस्तेमाल इन कामों के लिए किया जाता है आपके एंटरप्राइज़ की पहचान को, Google Cloud Search में इस्तेमाल की जाने वाली Google पहचान के साथ सिंक कर सकती है.

आइडेंटिटी कनेक्टर डेवलप करने के लिए, Google ये विकल्प देता है:

  • Identity कनेक्टर SDK टूल. यह विकल्प उन डेवलपर के लिए है जो प्रोग्रामिंग कर रहे हैं डाउनलोड कर सकते हैं. Identity Connector SDK टूल एक रैपर है REST API के आस-पास मौजूद होता है, जिसकी मदद से तेज़ी से कनेक्टर बनाए जा सकते हैं. बनाने के लिए SDK टूल का इस्तेमाल करने वाले आइडेंटिटी कनेक्टर के बारे में यहां देखें. पहचान कनेक्टर SDK टूल का इस्तेमाल करके एक आइडेंटिटी कनेक्टर बनाएं.

  • कम लेवल का REST API और एपीआई लाइब्रेरी. ये विकल्प उन डेवलपर के लिए हैं जो हो सकता है कि Java में प्रोग्रामिंग न हो या जिसके कोड बेस में REST API या लाइब्रेरी. REST API का इस्तेमाल करके, आइडेंटिटी कनेक्टर बनाने के लिए, यहां जाएं से Directory API: उपयोगकर्ता खाते उपयोगकर्ताओं और मैप को इसके लिए, Cloud Identity दस्तावेज़ ग्रुप की मैपिंग के बारे में जानकारी.

आइडेंटिटी कनेक्टर SDK टूल का इस्तेमाल करके, आइडेंटिटी कनेक्टर बनाना

किसी सामान्य आइडेंटिटी कनेक्टर में ये काम किए जाते हैं:

  1. कनेक्टर को कॉन्फ़िगर करें.
  2. सभी उपयोगकर्ताओं को अपने एंटरप्राइज़ आइडेंटिटी सिस्टम से वापस पाएं और उन्हें इस पते पर भेजें Google पहचान के साथ सिंक करने के लिए Google.
  3. अपने एंटरप्राइज़ आइडेंटिटी सिस्टम से सभी ग्रुप वापस पाएं और उन्हें इस पते पर भेजें Google पहचान के साथ सिंक करने के लिए Google.

डिपेंडेंसी सेट अप करें

SDK टूल का इस्तेमाल करने के लिए, आपको अपनी बिल्ड फ़ाइल में कुछ डिपेंडेंसी शामिल करनी होंगी. क्लिक करें अपने बिल्ड एनवायरमेंट की डिपेंडेंसी देखने के लिए, नीचे दिए गए टैब पर क्लिक करें:

Maven

<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 पहचान के साथ डेटा स्टोर करने की जगह. इस सेक्शन में बताया गया है कि Google से बाहर की पहचान से उपयोगकर्ताओं और ग्रुप को पूरी तरह से सिंक करने के लिए, FullSyncIdentityConnector टेंप्लेट डेटा स्टोर करने की जगह.

दस्तावेज़ों का यह अनुभाग IdentityConnecorSample.java सैंपल. इस सैंपल में, उपयोगकर्ता और ग्रुप के नाम का इस्तेमाल किया गया है पहचान की मैपिंग और उन्हें Google पहचान के साथ सिंक करती है.

कनेक्टर का एंट्री पॉइंट लागू करें

कनेक्टर का एंट्री पॉइंट 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. Google से दिए गए मुख्य-वैल्यू के साथ Configuration ऑब्जेक्ट को शुरू करता है पेयर. हर की-वैल्यू पेयर, ConfigValue ऑब्जेक्ट को Configuration ऑब्जेक्ट में डालें.

Repository इंटरफ़ेस को लागू करना

Repository ऑब्जेक्ट का मकसद, सिर्फ़ कुछ कार्रवाइयां करना है डेटा स्टोर करने की जगहों की आइडेंटिटी को Google वाली पहचानों के साथ सिंक करने की सुविधा मिलती है. इसका इस्तेमाल करते समय टेंप्लेट है, तो आपको आइडेंटिटी कनेक्टर बनाने के लिए Repository इंटरफ़ेस. FullTraversalConnector , तो आप शायद इन तरीकों को बदल देंगे:

  • कॉन्टेंट बनाने init() तरीका. किसी आइडेंटिटी रिपॉज़िटरी को सेट-अप और शुरू करने के लिए, ओवरराइड करें `init() तरीका इस्तेमाल करना होगा.

  • कॉन्टेंट बनाने listUsers() तरीका. आइडेंटिटी रिपॉज़िटरी में मौजूद सभी उपयोगकर्ताओं को Google के उपयोगकर्ताओं के साथ सिंक करने के लिए, इसे बदलें listUsers() तरीका.

  • कॉन्टेंट बनाने listGroups() तरीका. आइडेंटिटी रिपॉज़िटरी में मौजूद सभी ग्रुप को Google Groups के साथ सिंक करने के लिए, listGroups() तरीके को बदलें.

  • (ज़रूरी नहीं) close() तरीका. अगर आपको रिपॉज़िटरी (डेटा स्टोर की जगह) क्लीनअप करना है, तो close() को बदलें तरीका. कनेक्टर के बंद होने के दौरान, इस तरीके को एक बार कॉल किया जाता है.

कस्टम कॉन्फ़िगरेशन पैरामीटर पाएं

अपने कनेक्टर के कॉन्फ़िगरेशन को मैनेज करने के लिए, आपको कस्टम पैरामीटर Configuration ऑब्जेक्ट है. यह टास्क आम तौर पर इसमें किया जाता है Repository क्लास का init() तरीका.

Configuration क्लास में अलग-अलग तरह का डेटा पाने के कई तरीके हैं . हर तरीका, नतीजे के तौर पर ConfigValue ऑब्जेक्ट है. इसके बाद आप ConfigValue ऑब्जेक्ट का इस्तेमाल करेंगे get() पाने का तरीका बताया गया है. नीचे दिए गए स्निपेट में, userMappingCsvPath और Configuration ऑब्जेक्ट से 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 क्लास के टाइप पार्सर. ट्यूटोरियल कनेक्टर का नीचे दिया गया स्निपेट 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 ऑब्जेक्ट हैं. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए 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 ऑब्जेक्ट हैं. Google आपके यूआरएल पैरामीटर को कैसे इस्तेमाल करेगा, यह तय करने के लिए CheckpointClosableIterableImpl.Builder क्लास का इस्तेमाल करें. नीचे दिया गया कोड स्निपेट दिखाता है कि हर ग्रुप और सदस्य को सूची में पैकेज करने के लिए और उसी सूची से इटरेटर बनाना सूची:

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

अगले चरण

यहां दिए गए कुछ तरीके आज़माएं:

  • (ज़रूरी नहीं) close() लागू करें को बंद करने से पहले किसी भी संसाधन को रिलीज़ करने का तरीका बताएंगे.
  • (ज़रूरी नहीं) कॉन्टेंट कनेक्टर बनाना Content Connector SDK टूल का इस्तेमाल करके.