Google Chat से मिले अनुरोधों की पुष्टि करना

एचटीटीपी एंडपॉइंट पर बनाए गए Google Chat ऐप्लिकेशन के लिए, इस सेक्शन में बताया गया है कि यह पुष्टि करें कि आपके एंडपॉइंट पर अनुरोध, Chat से भेजे गए हैं.

इंटरैक्शन इवेंट को Chat ऐप्लिकेशन पर भेजने के लिए एंडपॉइंट है, तो Google आपकी सेवा के लिए अनुरोध करता है. यह पुष्टि करने के लिए कि अनुरोध तो Google Chat में बियरर टोकन आपके एंडपॉइंट के लिए हर एचटीटीपीएस अनुरोध के Authorization हेडर में. इसके लिए उदाहरण:

POST
Host: yourappurl.com
Authorization: Bearer AbCdEf123456
Content-Type: application/json
User-Agent: Google-Dynamite

पिछले उदाहरण में दी गई AbCdEf123456 स्ट्रिंग, बेयरर की अनुमति है टोकन. यह Google का बनाया हुआ एक क्रिप्टोग्राफ़िक टोकन है. कैरियर किस तरह का है टोकन और audience फ़ील्ड, प्रमाणीकरण ऑडियंस के उस प्रकार पर निर्भर करता है जिसे आपने Chat ऐप्लिकेशन को कॉन्फ़िगर करने पर.

अगर आपने Cloud का इस्तेमाल करके Chat ऐप्लिकेशन चालू किया है Cloud IAM फ़ंक्शन या Cloud IAM से मिले टोकन की पुष्टि अपने-आप होती है. आपने लोगों तक पहुंचाया मुफ़्त में को बस Google Chat सेवा खाते को अनुमति वाले एक उपयोगकर्ता के तौर पर जोड़ना होगा. अगर आपका ऐप्लिकेशन अपना खुद का एचटीटीपी सर्वर लागू करता है, तो आपके पास अपने कैरियर टोकन की पुष्टि करने का विकल्प होता है ओपन सोर्स Google API क्लाइंट लाइब्रेरी का इस्तेमाल करके:

अगर टोकन से Chat ऐप्लिकेशन के लिए पुष्टि नहीं होती, तो आपका सेवा को अनुरोध का जवाब, एचटीटीपीएस रिस्पॉन्स कोड से देना चाहिए 401 (Unauthorized).

Cloud Functions या Cloud Run का इस्तेमाल करके अनुरोधों की पुष्टि करें

अगर आपके फ़ंक्शन लॉजिक को Cloud Functions या Cloud Run का इस्तेमाल करके लागू किया गया है, तो के Authentication Audience फ़ील्ड में जाकर, App URL को चुना जाना चाहिए Chat ऐप्लिकेशन कनेक्शन सेटिंग पर जाएं और पक्का करें कि कॉन्फ़िगरेशन में ऐप्लिकेशन का यूआरएल, Cloud फ़ंक्शन के यूआरएल से मेल खाता है या Cloud Run एंडपॉइंट.

इसके बाद, आपको Google Chat सेवा खाते को अनुमति देनी होगी उपयोगकर्ता के तौर पर chat@system.gserviceaccount.com.

Cloud Functions (1st gen) इस्तेमाल करने का तरीका नीचे बताया गया है:

कंसोल

अपने फ़ंक्शन को Google Cloud पर डिप्लॉय करने के बाद:

  1. Google Cloud Console में, Cloud Functions पेज पर जाएं:

    Cloud Functions पर जाएं

  2. Cloud Functions सूची में, पाने वाले के आगे बने चेकबॉक्स पर क्लिक करें फ़ंक्शन का इस्तेमाल करना होगा. (फ़ंक्शन पर क्लिक न करें.)

  3. स्क्रीन पर सबसे ऊपर, अनुमतियां पर क्लिक करें. अनुमतियां पैनल खोलें.

  4. प्रिंसिपल जोड़ें पर क्लिक करें.

  5. प्रिंसिपल वाले नए फ़ील्ड में, chat@system.gserviceaccount.com डालें.

  6. Cloud Functions भूमिका चुनें > Cloud Functions Invoker को कोई भूमिका चुनें ड्रॉप-डाउन मेन्यू.

  7. सेव करें पर क्लिक करें.

gcloud

gcloud functions add-iam-policy-binding कमांड का इस्तेमाल करें:

gcloud functions add-iam-policy-binding RECEIVING_FUNCTION \
  --member='serviceAccount:chat@system.gserviceaccount.com' \
  --role='roles/cloudfunctions.invoker'

RECEIVING_FUNCTION को अपने Chat ऐप्लिकेशन का फ़ंक्शन.

Cloud Functions (2nd gen) या Cloud Run सेवाओं को इस्तेमाल करने का तरीका नीचे बताया गया है:

कंसोल

अपने फ़ंक्शन या सेवा को Google Cloud पर डिप्लॉय करने के बाद:

  1. Google Cloud Console में, Cloud Run पेज पर जाएं:

    Cloud Run पर जाएं

  2. Cloud Run सेवाएं सूची में, उन चीज़ों के आगे बने चेकबॉक्स पर क्लिक करें जिन्हें आप पाना चाहते हैं फ़ंक्शन का इस्तेमाल करना होगा. (फ़ंक्शन पर क्लिक न करें.)

  3. स्क्रीन पर सबसे ऊपर, अनुमतियां पर क्लिक करें. अनुमतियां पैनल खोलें.

  4. प्रिंसिपल जोड़ें पर क्लिक करें.

  5. प्रिंसिपल वाले नए फ़ील्ड में, chat@system.gserviceaccount.com डालें.

  6. Cloud Run भूमिका चुनें > Cloud Run Invoker को कोई भूमिका चुनें ड्रॉप-डाउन मेन्यू.

  7. सेव करें पर क्लिक करें.

gcloud

gcloud functions add-invoker-policy-binding कमांड का इस्तेमाल करें:

gcloud functions add-invoker-policy-binding RECEIVING_FUNCTION \
  --member='serviceAccount:chat@system.gserviceaccount.com'

RECEIVING_FUNCTION को अपने Chat ऐप्लिकेशन का फ़ंक्शन.

ऐप्लिकेशन यूआरएल आईडी टोकन की मदद से अनुरोधों की पुष्टि करें

अगर Chat ऐप्लिकेशन का ऑथेंटिकेशन ऑडियंस फ़ील्ड कनेक्शन सेटिंग को App URL पर सेट किया गया है, अनुरोध में मौजूद बियरर ऑथराइज़ेशन टोकन Google का हस्ताक्षर किया हुआ Open Connect है (OIDC) आईडी टोकन. email फ़ील्ड को chat@system.gserviceaccount.com पर सेट किया गया है. audience फ़ील्ड को उस यूआरएल पर सेट किया गया है जिसे आपने Google Chat को भेजने के लिए कॉन्फ़िगर किया है आपके Chat ऐप्लिकेशन पर किए गए अनुरोधों की संख्या. उदाहरण के लिए, अगर आपके Chat ऐप्लिकेशन का कॉन्फ़िगर किया गया एंडपॉइंट यह है https://example.com/app/ का मतलब है कि आईडी टोकन में audience फ़ील्ड है https://example.com/app/.

नीचे दिए गए सैंपल में, यह पुष्टि करने का तरीका बताया गया है कि कैरियर टोकन जारी किया गया था या नहीं आपने Google Chat का इस्तेमाल करके, Google OAuth क्लाइंट लाइब्रेरी का इस्तेमाल करके आपके ऐप्लिकेशन को टारगेट किया हो.

Java

java/basic-app/src/main/java/com/google/chat/app/basic/App.java
String CHAT_ISSUER = "chat@system.gserviceaccount.com";
JsonFactory factory = JacksonFactory.getDefaultInstance();

GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(new ApacheHttpTransport(), factory)
        .setAudience(Collections.singletonList(AUDIENCE))
        .build();

GoogleIdToken idToken = GoogleIdToken.parse(factory, bearer);
return idToken != null
    && verifier.verify(idToken)
    && idToken.getPayload().getEmailVerified()
    && idToken.getPayload().getEmail().equals(CHAT_ISSUER);

Python

python/basic-app/main.py
# Bearer Tokens received by apps will always specify this issuer.
CHAT_ISSUER = 'chat@system.gserviceaccount.com'

try:
    # Verify valid token, signed by CHAT_ISSUER, intended for a third party.
    request = requests.Request()
    token = id_token.verify_oauth2_token(bearer, request, AUDIENCE)
    return token['email'] == CHAT_ISSUER

except:
    return False

Node.js

node/basic-app/index.js
// Bearer Tokens received by apps will always specify this issuer.
const chatIssuer = 'chat@system.gserviceaccount.com';

// Verify valid token, signed by chatIssuer, intended for a third party.
try {
  const ticket = await client.verifyIdToken({
    idToken: bearer,
    audience: audience
  });
  return ticket.getPayload().email_verified
      && ticket.getPayload().email === chatIssuer;
} catch (unused) {
  return false;
}

अनुरोधों का प्रोजेक्ट नंबर JWT की मदद से पुष्टि करें

अगर Chat ऐप्लिकेशन का ऑथेंटिकेशन ऑडियंस फ़ील्ड कनेक्शन सेटिंग को Project Number पर सेट किया गया है. अनुरोध में शामिल, मोबाइल और इंटरनेट सेवा देने वाली कंपनी की अनुमति का टोकन खुद हस्ताक्षर किया हुआ है JSON वेब टोकन (JWT), chat@system.gserviceaccount.com ने जारी किया और हस्ताक्षर किए हैं. audience फ़ील्ड को उस Google Cloud प्रोजेक्ट नंबर पर सेट किया जाता है जिसका आपने इस्तेमाल किया था आपका Chat ऐप्लिकेशन बनाने के लिए. उदाहरण के लिए, अगर आपके Chat ऐप्लिकेशन का क्लाउड प्रोजेक्ट नंबर यह है 1234567890 है, तो JWT में audience फ़ील्ड 1234567890 है.

नीचे दिए गए सैंपल में, यह पुष्टि करने का तरीका बताया गया है कि कैरियर टोकन जारी किया गया था या नहीं आपने Google Chat का इस्तेमाल करके, Google OAuth क्लाइंट लाइब्रेरी का इस्तेमाल करके आपके प्रोजेक्ट को टारगेट किया हो.

Java

java/basic-app/src/main/java/com/google/chat/app/basic/App.java
String CHAT_ISSUER = "chat@system.gserviceaccount.com";
JsonFactory factory = JacksonFactory.getDefaultInstance();

GooglePublicKeysManager keyManagerBuilder =
    new GooglePublicKeysManager.Builder(new ApacheHttpTransport(), factory)
        .setPublicCertsEncodedUrl(
            "https://www.googleapis.com/service_accounts/v1/metadata/x509/" + CHAT_ISSUER)
        .build();

GoogleIdTokenVerifier verifier =
    new GoogleIdTokenVerifier.Builder(keyManagerBuilder).setIssuer(CHAT_ISSUER).build();

GoogleIdToken idToken = GoogleIdToken.parse(factory, bearer);
return idToken != null
    && verifier.verify(idToken)
    && idToken.verifyAudience(Collections.singletonList(AUDIENCE))
    && idToken.verifyIssuer(CHAT_ISSUER);

Python

python/basic-app/main.py
# Bearer Tokens received by apps will always specify this issuer.
CHAT_ISSUER = 'chat@system.gserviceaccount.com'

try:
    # Verify valid token, signed by CHAT_ISSUER, intended for a third party.
    request = requests.Request()
    certs_url = 'https://www.googleapis.com/service_accounts/v1/metadata/x509/' + CHAT_ISSUER
    token = id_token.verify_token(bearer, request, AUDIENCE, certs_url)
    return token['iss'] == CHAT_ISSUER

except:
    return False

Node.js

node/basic-app/index.js
// Bearer Tokens received by apps will always specify this issuer.
const chatIssuer = 'chat@system.gserviceaccount.com';

// Verify valid token, signed by CHAT_ISSUER, intended for a third party.
try {
  const response = await fetch('https://www.googleapis.com/service_accounts/v1/metadata/x509/' + chatIssuer);
  const certs = await response.json();
  await client.verifySignedJwtWithCertsAsync(
    bearer, certs, audience, [chatIssuer]);
  return true;
} catch (unused) {
  return false;
}