'सभी खातों की सुरक्षा' सुविधा की मदद से उपयोगकर्ता खातों को सुरक्षित रखना

अगर आपका ऐप्लिकेशन उपयोगकर्ताओं को Google का इस्तेमाल करके अपने खाते में साइन इन करने की अनुमति देता है, तो के साथ शेयर किए गए इन उपयोगकर्ताओं की सुरक्षा Google Ads API का इस्तेमाल करके, 'सभी खातों की सुरक्षा' सेवा से मिलने वाली सुरक्षा से जुड़ी गतिविधियों की सूचनाएं पाएं.

ये नोटिफिकेशन आपको आपके Google खाते के Google खातों में हुए इस्तेमाल करते हैं, जिससे अक्सर उनके खातों की सुरक्षा पर असर पड़ सकता है: आपका ऐप्लिकेशन. उदाहरण के लिए, अगर किसी उपयोगकर्ता का Google खाता हाइजैक हो जाता है, तो वह संभावित रूप से, ईमेल के ज़रिए आपके ऐप्लिकेशन के साथ उपयोगकर्ता के खाते को छेड़छाड़ की जा सकती है खाता वापस पाना या सिंगल साइन-ऑन (सिंगल साइन-ऑन) का इस्तेमाल करना शामिल है.

ऐसी घटनाओं के जोखिम को कम करने में आपकी मदद करने के लिए, Google आपके सेवा ऑब्जेक्ट जिन्हें सुरक्षा इवेंट टोकन कहा जाता है. ये टोकन बहुत कम डेटा दिखाते हैं जानकारी—बस सुरक्षा से जुड़ी गतिविधि किस तरह की थी और वह कब हुई, और प्रभावित उपयोगकर्ता का आइडेंटिफ़ायर—लेकिन आप उसका उपयोग उचित कार्रवाई करें. उदाहरण के लिए, यदि उपयोगकर्ता का Google खाता है, तो आपके पास उस उपयोगकर्ता के लिए, 'Google से साइन इन करें' सुविधा को कुछ समय के लिए बंद करने का विकल्प होता है. खाता वापस पाने के ईमेल उपयोगकर्ता के Gmail पते पर भेजे जाने से रोकें.

'सभी खातों की सुरक्षा' सुविधा RISC मानक, जिसे OpenID Foundation.

खास जानकारी

अपने ऐप्लिकेशन या सेवा के साथ 'सभी खातों की सुरक्षा' सुविधा का इस्तेमाल करने के लिए, आपको ये काम पूरे करें:

  1. में अपना प्रोजेक्ट सेट अप करें.

  2. इवेंट रिसीवर एंडपॉइंट बनाएं, जिस पर Google सुरक्षा इवेंट भेजेगा टोकन. यह एंडपॉइंट, इसे मिलने वाले टोकन की पुष्टि करने के लिए ज़िम्मेदार है और सुरक्षा से जुड़ी घटनाओं के लिए, अपनी पसंद के हिसाब से किसी भी तरीके से जवाब दिया जा सकता है.

  3. सुरक्षा से जुड़े इवेंट टोकन पाने के लिए, अपने एंडपॉइंट को Google के साथ रजिस्टर करें.

पूर्वापेक्षा

आपको सिर्फ़ उन Google उपयोगकर्ताओं के लिए सुरक्षा इवेंट टोकन मिलते हैं जिन्होंने सेवा को उनकी प्रोफ़ाइल जानकारी या ईमेल पते ऐक्सेस करने की अनुमति दें. आपने लोगों तक पहुंचाया मुफ़्त में यह अनुमति पाने के लिए, profile या email दायरों का अनुरोध करें. नया Google से साइन इन करें या लेगसी वर्शन Google साइन-इन SDK टूल, डिफ़ॉल्ट रूप से इन दायरों का अनुरोध करते हैं. हालांकि, यदि आप डिफ़ॉल्ट सेटिंग का उपयोग नहीं करते हैं, या यदि आप Google के OpenID का उपयोग करते हैं एंडपॉइंट को सीधे कनेक्ट करें, पक्का करें कि आपको इनमें से कम से कम एक दायरे का अनुरोध करना है.

में कोई प्रोजेक्ट सेट अप करें

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

सेवा खाता बनाने के लिए:

  1. खोलें . जब कहा जाए, तब अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है अपने ऐप्लिकेशन में Google की सेवाओं को ऐक्सेस करने के लिए इस्तेमाल किया जाने वाला प्रोजेक्ट.

  2. क्रेडेंशियल बनाएं > सेवा खाता.

  3. आरआईएससी कॉन्फ़िगरेशन एडमिन की भूमिका वाला नया सेवा खाता बनाएं (roles/riscconfigs.admin) फ़ॉलो करके ये निर्देश.

  4. नए सेवा खाते के लिए कुंजी बनाएं. JSON कुंजी चुनें लिखें और फिर बनाएं पर क्लिक करें. कुंजी बनाए जाने पर, आपको एक JSON फ़ाइल डाउनलोड करनी होगी, जिसमें आपका सेवा खाता शामिल है क्रेडेंशियल डालें. इस फ़ाइल को किसी सुरक्षित जगह पर रखें, लेकिन इसे आपके पास भी ऐक्सेस करने की सुविधा हो इवेंट रिसीवर एंडपॉइंट.

जब आप अपने प्रोजेक्ट के क्रेडेंशियल पेज पर हों, तब भी क्लाइंट का ध्यान रखें ऐसे आईडी जिनका इस्तेमाल 'Google से साइन इन करें' या 'Google साइन इन' (लेगसी) के लिए किया जाता है. आम तौर पर, आपके पास हर एक प्रॉपर्टी के लिए एक क्लाइंट आईडी होता है का इस्तेमाल करें. सुरक्षा से जुड़ी गतिविधि की पुष्टि करने के लिए, आपको इन क्लाइंट आईडी की ज़रूरत होगी जैसा कि अगले सेक्शन में बताया गया है.

RISC API को चालू करने के लिए:

  1. RISC API पेज को इसमें खोलें . पक्का करें कि आपको जिस प्रोजेक्ट का इस्तेमाल करना है Google सेवाओं को ऐक्सेस करने के लिए अभी भी चुना हुआ है.

  2. RISC की शर्तें पढ़ें और पक्का करें कि आपने ज़रूरी शर्तों को समझ लिया है.

    अगर किसी संगठन के मालिकाना हक वाले प्रोजेक्ट के लिए एपीआई चालू किया जा रहा है, तो पक्का करें कि आपके पास अपने संगठन को RISC की शर्तों से बाध्य करने का अधिकार है.

  3. अगर आप आरआईएससी की शर्तों से सहमत हैं, तो ही चालू करें पर क्लिक करें.

इवेंट पाने वाले का एंडपॉइंट बनाना

Google से सुरक्षा से जुड़ी गतिविधि की सूचनाएं पाने के लिए, एचटीटीपीएस एंडपॉइंट बनाना जो एचटीटीपीएस पीओएसटी अनुरोधों को हैंडल करती है. इस एंडपॉइंट को रजिस्टर करने के बाद (नीचे देखें), Google, क्रिप्टोग्राफ़िक तरीके से हस्ताक्षर की गई स्ट्रिंग पोस्ट करना शुरू करेगा. इस स्ट्रिंग को सिक्योरिटी इवेंट कहा जाता है टोकन. सुरक्षा इवेंट टोकन, साइन किए गए JWT होते हैं. इनमें ये शामिल होते हैं सुरक्षा से जुड़े किसी इवेंट के बारे में जानकारी देता है.

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

1. सुरक्षा से जुड़े इवेंट टोकन को डिकोड करें और उनकी पुष्टि करें

क्योंकि सुरक्षा इवेंट टोकन एक खास तरह के JWT हैं, इसलिए किसी भी JWT लाइब्रेरी, जिसे डिकोड करने और डिकोड करने के लिए, jwt.io पर सूचीबद्ध है और वे उसकी पुष्टि कर सकें. आप चाहे किसी भी लाइब्रेरी का इस्तेमाल करें, आपके टोकन की पुष्टि करने वाला कोड फ़ॉलो किया जा रहा है:

  1. 'सभी खातों की सुरक्षा' जारी करने वाला आइडेंटिफ़ायर (issuer) और साइनिंग पासकोड पाएं सर्टिफ़िकेट यूआरआई (jwks_uri), Google के RISC कॉन्फ़िगरेशन दस्तावेज़ से लिया गया है, जो आपको यहां मिल सकते हैं https://accounts.google.com/.well-known/risc-configuration.
  2. अपनी पसंद की JWT लाइब्रेरी का इस्तेमाल करके, हेडर से साइनिंग पासकोड का आईडी पाएं .
  3. Google के साइनिंग पासकोड सर्टिफ़िकेट वाले दस्तावेज़ से, सार्वजनिक पासकोड को की आईडी जो आपको पिछले चरण में मिली थी. अगर दस्तावेज़ में कोई कुंजी नहीं है होना चाहिए, तो हो सकता है कि सुरक्षा से जुड़ा इवेंट टोकन अमान्य है और आपका एंडपॉइंट एचटीटीपी गड़बड़ी 400 दिखाएगा.
  4. अपनी पसंद की JWT लाइब्रेरी का इस्तेमाल करके, इनकी पुष्टि करें:
    • सुरक्षा से जुड़े इवेंट के टोकन को, उस सार्वजनिक पासकोड का इस्तेमाल करके साइन किया जाता है जो आपको पिछला चरण.
    • टोकन पर aud का दावा, आपके ऐप्लिकेशन में से एक है क्लाइंट आईडी.
    • टोकन के लिए iss पर किया गया दावा, आपको जारी करने वाले के आइडेंटिफ़ायर से मिलता-जुलता है को खोजना है. ध्यान दें कि आपको टोकन की समयसीमा (exp) की पुष्टि करने की ज़रूरत नहीं है, क्योंकि सुरक्षा से जुड़े इवेंट के टोकन ऐतिहासिक घटनाओं को दिखाते हैं और इसलिए उनकी समयसीमा खत्म नहीं होती.

उदाहरण के लिए:

Java

java-jwt का इस्तेमाल करना और jwks-rsa-java:

public DecodedJWT validateSecurityEventToken(String token) {
    DecodedJWT jwt = null;
    try {
        // In a real implementation, get these values from
        // https://accounts.google.com/.well-known/risc-configuration
        String issuer = "accounts.google.com";
        String jwksUri = "https://www.googleapis.com/oauth2/v3/certs";

        // Get the ID of the key used to sign the token.
        DecodedJWT unverifiedJwt = JWT.decode(token);
        String keyId = unverifiedJwt.getKeyId();

        // Get the public key from Google.
        JwkProvider googleCerts = new UrlJwkProvider(new URL(jwksUri), null, null);
        PublicKey publicKey = googleCerts.get(keyId).getPublicKey();

        // Verify and decode the token.
        Algorithm rsa = Algorithm.RSA256((RSAPublicKey) publicKey, null);
        JWTVerifier verifier = JWT.require(rsa)
                .withIssuer(issuer)
                // Get your apps' client IDs from the API console:
                // ?project=_
                .withAudience("123456789-abcedfgh.apps.googleusercontent.com",
                              "123456789-ijklmnop.apps.googleusercontent.com",
                              "123456789-qrstuvwx.apps.googleusercontent.com")
                .acceptLeeway(Long.MAX_VALUE)  // Don't check for expiration.
                .build();
        jwt = verifier.verify(token);
    } catch (JwkException e) {
        // Key not found. Return HTTP 400.
    } catch (InvalidClaimException e) {

    } catch (JWTDecodeException exception) {
        // Malformed token. Return HTTP 400.
    } catch (MalformedURLException e) {
        // Invalid JWKS URI.
    }
    return jwt;
}

Python

import json
import jwt       # pip install pyjwt
import requests  # pip install requests

def validate_security_token(token, client_ids):
    # Get Google's RISC configuration.
    risc_config_uri = 'https://accounts.google.com/.well-known/risc-configuration'
    risc_config = requests.get(risc_config_uri).json()

    # Get the public key used to sign the token.
    google_certs = requests.get(risc_config['jwks_uri']).json()
    jwt_header = jwt.get_unverified_header(token)
    key_id = jwt_header['kid']
    public_key = None
    for key in google_certs['keys']:
        if key['kid'] == key_id:
            public_key = jwt.algorithms.RSAAlgorithm.from_jwk(json.dumps(key))
    if not public_key:
        raise Exception('Public key certificate not found.')
        # In this situation, return HTTP 400

    # Decode the token, validating its signature, audience, and issuer.
    try:
        token_data = jwt.decode(token, public_key, algorithms='RS256',
                                options={'verify_exp': False},
                                audience=client_ids, issuer=risc_config['issuer'])
    except:
        raise
        # Validation failed. Return HTTP 400.
    return token_data

# Get your apps' client IDs from the API console:
# ?project=_
client_ids = ['123456789-abcedfgh.apps.googleusercontent.com',
              '123456789-ijklmnop.apps.googleusercontent.com',
              '123456789-qrstuvwx.apps.googleusercontent.com']
token_data = validate_security_token(token, client_ids)

अगर टोकन मान्य है और उसे डिकोड कर दिया गया है, तो एचटीटीपी स्टेटस 202 दिखाएं. इसके बाद, टोकन से दिखाए गए सुरक्षा से जुड़ी गतिविधि को मैनेज करें.

2. सुरक्षा से जुड़ी गतिविधियों को मैनेज करना

डिकोड किए जाने पर, सुरक्षा से जुड़ी गतिविधि का टोकन इस तरह का दिखता है:

{
  "iss": "https://accounts.google.com/",
  "aud": "123456789-abcedfgh.apps.googleusercontent.com",
  "iat": 1508184845,
  "jti": "756E69717565206964656E746966696572",
  "events": {
    "https://schemas.openid.net/secevent/risc/event-type/account-disabled": {
      "subject": {
        "subject_type": "iss-sub",
        "iss": "https://accounts.google.com/",
        "sub": "7375626A656374"
      },
      "reason": "hijacking"
    }
  }
}

iss और aud दावे, टोकन जारी करने वाले (Google) और टोकन के रूप में जनरेट किया गया पाने वाले का नाम (आपकी सेवा). आपने इसमें इन दावों की पुष्टि की है: पिछला चरण.

jti दावा एक ऐसी स्ट्रिंग है जो सुरक्षा से जुड़ी किसी एक गतिविधि की पहचान करती है. जो स्ट्रीम के लिए यूनीक हैं. इस आइडेंटिफ़ायर का इस्तेमाल करके, सुरक्षा से जुड़ी गतिविधियों को ट्रैक किया जा सकता है जो आपको मिले हैं.

events दावे में, टोकन की सुरक्षा से जुड़ी गतिविधि के बारे में जानकारी शामिल होती है दर्शाता है. यह दावा, इवेंट टाइप आइडेंटिफ़ायर से subject पर मैप करने का है दावा, जिससे इस इवेंट से जुड़े उपयोगकर्ता के बारे में बताया जाता है. साथ ही, उस इवेंट के बारे में जानकारी जो उपलब्ध हो सकती है.

subject दावा, किसी उपयोगकर्ता की पहचान करने के लिए, उसके यूनीक Google प्लैटफ़ॉर्म का इस्तेमाल करता है खाता आईडी (sub). यह Google खाता आईडी वही आइडेंटिफ़ायर (sub) है यह जेडब्लयूटी आईडी टोकन होता है. इसे नए 'Google से साइन इन करें' (Javascript) से जारी किया जाता है , एचटीएमएल) लाइब्रेरी, Google साइन इन की लेगसी लाइब्रेरी या OpenID Connect. जब subject_type दावा id_token_claims है, इसमें एक email फ़ील्ड भी शामिल हो सकता है, जिसमें उपयोगकर्ता का ईमेल पता.

events दावे में दी गई जानकारी का इस्तेमाल करके, इवेंट टाइप तय करें.

OAuth टोकन आइडेंटिफ़ायर

अलग-अलग टोकन के बारे में OAuth इवेंट के लिए, टोकन का विषय आइडेंटिफ़ायर टाइप में ये फ़ील्ड शामिल होते हैं:

  • token_type: सिर्फ़ refresh_token का इस्तेमाल किया जा सकता है.

  • token_identifier_alg: संभावित वैल्यू के लिए, नीचे दी गई टेबल देखें.

  • token: नीचे दी गई टेबल देखें.

token_identifier_alg टोकन
prefix टोकन के पहले 16 वर्ण.
hash_base64_sha512_sha512 SHA-512 का इस्तेमाल करने वाले टोकन का डबल हैश.

इन इवेंट के साथ इंटिग्रेट करने पर, हमारा सुझाव है कि आप अपने टोकन के आधार पर उसे इंडेक्स करें का इस्तेमाल करें, ताकि इवेंट मिलने पर क्विक मैच मिल सके.

इस्तेमाल किए जा सकने वाले इवेंट टाइप

'सभी खातों की सुरक्षा' सुविधा, सुरक्षा से जुड़ी इस तरह की गतिविधियों के साथ काम करती है:

इवेंट का टाइप एट्रिब्यूट जवाब देने का तरीका
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked ज़रूरी है: उपयोगकर्ता की मौजूदा गतिविधि को खत्म करके, उसके खाते को फिर से सुरक्षित करें ओपन सेशन.
https://schemas.openid.net/secevent/oauth/event-type/tokens-revoked

ज़रूरी है: अगर टोकन 'Google साइन-इन' के लिए है, तो उनकी मौजूदा खुले सेशन हैं. इसके अलावा, उपयोगकर्ता को इन कामों के लिए सुझाव भी दिए जा सकते हैं साइन-इन का दूसरा तरीका सेट अप करना.

सुझाया गया: अगर टोकन, अन्य Google API को ऐक्सेस करने के लिए है, तो मिटाएं उपयोगकर्ता के सेव किए गए कोई भी OAuth टोकन शामिल नहीं किए जाएंगे.

https://schemas.openid.net/secevent/oauth/event-type/token-revoked इसके लिए, OAuth टोकन आइडेंटिफ़ायर सेक्शन देखें टोकन आइडेंटिफ़ायर

ज़रूरी है: अगर इससे जुड़ा रीफ़्रेश टोकन सेव किया जाता है, तो उसे मिटा दें और अगली बार ऐक्सेस टोकन की ज़रूरत पड़ने पर, उपयोगकर्ता से फिर से सहमति देने का अनुरोध करें.

https://schemas.openid.net/secevent/risc/event-type/account-disabled reason=hijacking,
reason=bulk-account

ज़रूरी है: अगर खाता बंद किए जाने की वजह, hijacking, उपयोगकर्ता के खाते को बंद करके उसके खाते को फिर से सुरक्षित करें मौजूदा खुले सेशन हैं.

सुझाया गया: अगर खाते को बंद करने की वजह bulk-account, अपनी सेवा पर उपयोगकर्ता की गतिविधि का विश्लेषण करें और उचित फ़ॉलो-अप कार्रवाइयों का पता लगाएं.

सुझाया गया: अगर कोई वजह नहीं बताई गई है, तो और आपके खाते से जुड़े ईमेल पते का इस्तेमाल करके, खाता वापस पाने की सुविधा को बंद करता है उपयोगकर्ता का Google खाता (आम तौर पर, Gmail खाता होना ज़रूरी नहीं है). लोगों को साइन-इन करने का कोई दूसरा तरीका उपलब्ध कराएं.

https://schemas.openid.net/secevent/risc/event-type/account-enabled सुझाया गया: उपयोगकर्ता के लिए 'Google साइन इन' को फिर से चालू करना और फिर से चालू करना खाता वापस पाने के लिए किया जा सकता है.
https://schemas.openid.net/secevent/risc/event-type/account-credential-change-required सुझाव: अपनी सेवा पर हुई संदिग्ध गतिविधि का पता लगाएं और उचित कार्रवाई.
https://schemas.openid.net/secevent/risc/event-type/verification state=state सुझाया गया: लॉग करें कि टेस्ट टोकन मिला है.

डुप्लीकेट और छूटे हुए इवेंट

'सभी खातों की सुरक्षा' सुविधा उन इवेंट को फिर से डिलीवर करने की कोशिश करेगी जो उसके मुताबिक हैं डिलीवर नहीं हुआ. इसलिए, हो सकता है कि आपको कभी-कभी एक ही इवेंट मिले कई बार इस्तेमाल किया जा सकता है. अगर इससे बार-बार होने वाली कार्रवाइयों से आपको परेशानी होती है, तो तो jti दावे का इस्तेमाल करें. यह इवेंट) से कॉपी किया जा सकता है. कुछ बाहरी टूल मौजूद हैं. जैसे, Google Cloud Dataflow की मदद से अपनी साइट को आगे और बेहतर बनाएं को हटा दिया जाता है.

ध्यान दें कि बार-बार कोशिश करने पर ही इवेंट डिलीवर किए जाते हैं. इसलिए, अगर आपका रिसीवर काम नहीं कर रहा है, तो यह हो सकता है कि आप कुछ इवेंट को स्थायी रूप से छोड़ दें.

अपना रिसीवर रजिस्टर करें

सुरक्षा से जुड़ी गतिविधियां पाना शुरू करने के लिए, RISC API. RISC API पर किए जाने वाले कॉल के साथ एक अनुमति वाला टोकन भी होना चाहिए.

आपको सिर्फ़ अपने ऐप्लिकेशन के उपयोगकर्ताओं के लिए सुरक्षा से जुड़ी गतिविधियों की सूचना मिलेगी. इसलिए, आपके पास उस स्क्रीन को कॉन्फ़िगर करना ज़रूरी है जहां OAuth के लिए सहमति दी जाती है इसके लिए, आपको नीचे दिया गया तरीका अपनाना होगा.

1. ऑथराइज़ेशन टोकन जनरेट करें

RISC API के लिए प्राधिकरण टोकन जनरेट करने के लिए, निम्न दावे:

{
  "iss": SERVICE_ACCOUNT_EMAIL,
  "sub": SERVICE_ACCOUNT_EMAIL,
  "aud": "https://risc.googleapis.com/google.identity.risc.v1beta.RiscManagementService",
  "iat": CURRENT_TIME,
  "exp": CURRENT_TIME + 3600
}

अपने सेवा खाते की निजी कुंजी का इस्तेमाल करके JWT पर हस्ताक्षर करें. यह आपको वह JSON फ़ाइल जिसे आपने सेवा खाते की कुंजी बनाते समय डाउनलोड किया था.

उदाहरण के लिए:

Java

java-jwt और Google की पुष्टि करने से जुड़ी लाइब्रेरी:

public static String makeBearerToken() {
    String token = null;
    try {
        // Get signing key and client email address.
        FileInputStream is = new FileInputStream("your-service-account-credentials.json");
        ServiceAccountCredentials credentials =
               (ServiceAccountCredentials) GoogleCredentials.fromStream(is);
        PrivateKey privateKey = credentials.getPrivateKey();
        String keyId = credentials.getPrivateKeyId();
        String clientEmail = credentials.getClientEmail();

        // Token must expire in exactly one hour.
        Date issuedAt = new Date();
        Date expiresAt = new Date(issuedAt.getTime() + 3600000);

        // Create signed token.
        Algorithm rsaKey = Algorithm.RSA256(null, (RSAPrivateKey) privateKey);
        token = JWT.create()
                .withIssuer(clientEmail)
                .withSubject(clientEmail)
                .withAudience("https://risc.googleapis.com/google.identity.risc.v1beta.RiscManagementService")
                .withIssuedAt(issuedAt)
                .withExpiresAt(expiresAt)
                .withKeyId(keyId)
                .sign(rsaKey);
    } catch (ClassCastException e) {
        // Credentials file doesn't contain a service account key.
    } catch (IOException e) {
        // Credentials file couldn't be loaded.
    }
    return token;
}

Python

import json
import time

import jwt  # pip install pyjwt

def make_bearer_token(credentials_file):
    with open(credentials_file) as service_json:
        service_account = json.load(service_json)
        issuer = service_account['client_email']
        subject = service_account['client_email']
        private_key_id = service_account['private_key_id']
        private_key = service_account['private_key']
    issued_at = int(time.time())
    expires_at = issued_at + 3600
    payload = {'iss': issuer,
               'sub': subject,
               'aud': 'https://risc.googleapis.com/google.identity.risc.v1beta.RiscManagementService',
               'iat': issued_at,
               'exp': expires_at}
    encoded = jwt.encode(payload, private_key, algorithm='RS256',
                         headers={'kid': private_key_id})
    return encoded

auth_token = make_bearer_token('your-service-account-credentials.json')

इस ऑथराइज़ेशन टोकन का इस्तेमाल, एक घंटे के लिए RISC API कॉल करने के लिए किया जा सकता है. टास्क कब शुरू होगा टोकन की समयसीमा खत्म हो गई है. RISC API कॉल करना जारी रखने के लिए, नया टोकन जनरेट करें.

2. RISC स्ट्रीम कॉन्फ़िगरेशन एपीआई को कॉल करें

अब आपके पास अनुमति वाला टोकन है. इसे कॉन्फ़िगर करने के लिए, RISC API का इस्तेमाल किया जा सकता है आपके प्रोजेक्ट की सुरक्षा से जुड़ी गतिविधि की स्ट्रीम. इसमें रिसीवर को रजिस्टर करना भी शामिल है एंडपॉइंट का इस्तेमाल करें.

ऐसा करने के लिए, https://risc.googleapis.com/v1beta/stream:update को एक एचटीटीपीएस पोस्ट अनुरोध भेजें. आपका रिसीवर एंडपॉइंट और सुरक्षा के प्रकार तय करके वे इवेंट जिनमें आपकी दिलचस्पी हो:

POST /v1beta/stream:update HTTP/1.1
Host: risc.googleapis.com
Authorization: Bearer AUTH_TOKEN

{
  "delivery": {
    "delivery_method":
      "https://schemas.openid.net/secevent/risc/delivery-method/push",
    "url": RECEIVER_ENDPOINT
  },
  "events_requested": [
    SECURITY_EVENT_TYPES
  ]
}

उदाहरण के लिए:

Java

public static void configureEventStream(final String receiverEndpoint,
                                        final List<String> eventsRequested,
                                        String authToken) throws IOException {
    ObjectMapper jsonMapper = new ObjectMapper();
    String streamConfig = jsonMapper.writeValueAsString(new Object() {
        public Object delivery = new Object() {
            public String delivery_method =
                    "https://schemas.openid.net/secevent/risc/delivery-method/push";
            public String url = receiverEndpoint;
        };
        public List<String> events_requested = eventsRequested;
    });

    HttpPost updateRequest = new HttpPost("https://risc.googleapis.com/v1beta/stream:update");
    updateRequest.addHeader("Content-Type", "application/json");
    updateRequest.addHeader("Authorization", "Bearer " + authToken);
    updateRequest.setEntity(new StringEntity(streamConfig));

    HttpResponse updateResponse = new DefaultHttpClient().execute(updateRequest);
    Header[] responseContentTypeHeaders = updateResponse.getHeaders("Content-Type");
    StatusLine responseStatus = updateResponse.getStatusLine();
    int statusCode = responseStatus.getStatusCode();
    HttpEntity entity = updateResponse.getEntity();
    // Now handle response
}

// ...

configureEventStream(
        "https://your-service.example.com/security-event-receiver",
        Arrays.asList(
                "https://schemas.openid.net/secevent/risc/event-type/account-credential-change-required",
                "https://schemas.openid.net/secevent/risc/event-type/account-disabled"),
        authToken);

Python

import requests

def configure_event_stream(auth_token, receiver_endpoint, events_requested):
    stream_update_endpoint = 'https://risc.googleapis.com/v1beta/stream:update'
    headers = {'Authorization': 'Bearer {}'.format(auth_token)}
    stream_cfg = {'delivery': {'delivery_method': 'https://schemas.openid.net/secevent/risc/delivery-method/push',
                               'url': receiver_endpoint},
                  'events_requested': events_requested}
    response = requests.post(stream_update_endpoint, json=stream_cfg, headers=headers)
    response.raise_for_status()  # Raise exception for unsuccessful requests

configure_event_stream(auth_token, 'https://your-service.example.com/security-event-receiver',
                       ['https://schemas.openid.net/secevent/risc/event-type/account-credential-change-required',
                        'https://schemas.openid.net/secevent/risc/event-type/account-disabled'])

अगर अनुरोध, एचटीटीपी 200 दिखाता है, तो इवेंट स्ट्रीम कॉन्फ़िगर हो गई है और रिसीवर एंडपॉइंट को सुरक्षा से जुड़े इवेंट टोकन मिलने शुरू हो जाएंगे. कॉन्टेंट बनाने अगले सेक्शन में बताया गया है कि स्ट्रीम कॉन्फ़िगरेशन और एंडपॉइंट की जांच कैसे की जा सकती है ताकि यह पुष्टि की जा सके कि सब कुछ एक साथ ठीक से काम कर रहा है.

अपना मौजूदा स्ट्रीम कॉन्फ़िगरेशन पाना और उसे अपडेट करना

अगर आने वाले समय में आपको अपनी स्ट्रीम के कॉन्फ़िगरेशन में बदलाव करना है, तो इसलिए, https://risc.googleapis.com/v1beta/stream को अनुमति वाले जीईटी अनुरोध करके मौजूदा स्ट्रीम कॉन्फ़िगरेशन के साथ-साथ रिस्पॉन्स के मुख्य हिस्से में बदलाव करके, कॉन्फ़िगरेशन को बदलकर फिर से https://risc.googleapis.com/v1beta/stream:update कर दिया गया है, जैसा कि ऊपर बताया गया है.

इवेंट स्ट्रीम को रोकना और फिर से शुरू करना

अगर आपको कभी भी Google के इवेंट स्ट्रीम को रोकना हो, तो अनुमति वाली पीओएसटी करें { "status": "disabled" } के साथ https://risc.googleapis.com/v1beta/stream/status:update को किया गया अनुरोध अनुरोध के मुख्य हिस्से में. स्ट्रीम बंद होने पर, Google इवेंट नहीं भेजता आपके एंडपॉइंट से कनेक्ट करता है. साथ ही, सुरक्षा से जुड़ी गतिविधियों के होने पर उन्हें बफ़र नहीं करता. यहां की यात्रा पर हूं इवेंट स्ट्रीम को फिर से चालू करें, उसी एंडपॉइंट पर { "status": "enabled" } पोस्ट करें.

3. ज़रूरी नहीं: स्ट्रीम कॉन्फ़िगरेशन की जांच करना

यह पुष्टि की जा सकती है कि आपका स्ट्रीम कॉन्फ़िगरेशन और रिसीवर एंडपॉइंट काम कर रहा है अपनी इवेंट स्ट्रीम के ज़रिए पुष्टि टोकन भेजकर सही तरीके से एक साथ साइन इन करें. इस टोकन में एक खास स्ट्रिंग हो सकती है, जिसका इस्तेमाल करके आप यह पुष्टि कर सकते हैं कि टोकन आपके एंडपॉइंट पर मिला. इस फ़्लो का इस्तेमाल करने के लिए, https://schemas.openid.net/secevent/risc/event-type/verification की सदस्यता लें पाने वाले के लिए रजिस्टर करते समय इवेंट किस तरह का है.

पुष्टि टोकन का अनुरोध करने के लिए, अनुमति वाले एचटीटीपीएस पोस्ट का अनुरोध करें https://risc.googleapis.com/v1beta/stream:verify. अनुरोध के मुख्य हिस्से में, कुछ जानकारी दें पहचान करने वाली स्ट्रिंग:

{
  "state": "ANYTHING"
}

उदाहरण के लिए:

Java

public static void testEventStream(final String stateString,
                                   String authToken) throws IOException {
    ObjectMapper jsonMapper = new ObjectMapper();
    String json = jsonMapper.writeValueAsString(new Object() {
        public String state = stateString;
    });

    HttpPost updateRequest = new HttpPost("https://risc.googleapis.com/v1beta/stream:verify");
    updateRequest.addHeader("Content-Type", "application/json");
    updateRequest.addHeader("Authorization", "Bearer " + authToken);
    updateRequest.setEntity(new StringEntity(json));

    HttpResponse updateResponse = new DefaultHttpClient().execute(updateRequest);
    Header[] responseContentTypeHeaders = updateResponse.getHeaders("Content-Type");
    StatusLine responseStatus = updateResponse.getStatusLine();
    int statusCode = responseStatus.getStatusCode();
    HttpEntity entity = updateResponse.getEntity();
    // Now handle response
}

// ...

testEventStream("Test token requested at " + new Date().toString(), authToken);

Python

import requests
import time

def test_event_stream(auth_token, nonce):
    stream_verify_endpoint = 'https://risc.googleapis.com/v1beta/stream:verify'
    headers = {'Authorization': 'Bearer {}'.format(auth_token)}
    state = {'state': nonce}
    response = requests.post(stream_verify_endpoint, json=state, headers=headers)
    response.raise_for_status()  # Raise exception for unsuccessful requests

test_event_stream(auth_token, 'Test token requested at {}'.format(time.ctime()))

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

गड़बड़ी कोड का रेफ़रंस

RISC API से इन गड़बड़ियों का पता लगाया जा सकता है:

गड़बड़ी कोड गड़बड़ी का मैसेज सुझाई गई कार्रवाइयां
400 स्ट्रीम कॉन्फ़िगरेशन में $fieldname फ़ील्ड ज़रूर होना चाहिए. https://risc.googleapis.com/v1beta/stream:update एंडपॉइंट पर भेजा गया आपका अनुरोध अमान्य है या इसे तय नहीं किया जा सकता पार्स किया गया. कृपया अपने अनुरोध में $fieldname शामिल करें.
401 अनधिकृत. प्राधिकरण विफल रहा. सुनिश्चित करें कि आपने एक अनुमति वाला टोकन, जिसके साथ अनुरोध किया गया हो और यह भी बताया गया हो कि टोकन मान्य है और उसकी समयसीमा खत्म न हुई हो.
403 कोड वाला डिलीवरी एंडपॉइंट एक एचटीटीपीएस यूआरएल होना चाहिए. आपका डिलीवरी एंडपॉइंट. इसका मतलब है कि वह एंडपॉइंट जो आपको आरआईएससी इवेंट के तौर पर चाहिए डिलीवर किया गया) एचटीटीपीएस होना चाहिए. हम एचटीटीपी यूआरएल पर RISC इवेंट नहीं भेजते.
403 कोड वाला मौजूदा स्ट्रीम कॉन्फ़िगरेशन में निर्देशों का पालन करने वाली डिलीवरी नहीं है का तरीका बताया गया है. आपके Google Cloud प्रोजेक्ट में पहले से ही RISC कॉन्फ़िगरेशन होना चाहिए. अगर आपने आप Firebase का इस्तेमाल कर रहे हैं और 'Google साइन-इन' चालू है, तो Firebase अपने प्रोजेक्ट के लिए RISC को मैनेज करना; आप एक कस्टम पैरामीटर नहीं बना सकेंगे, कॉन्फ़िगरेशन. अगर Firebase प्रोजेक्ट के लिए 'Google साइन-इन' का इस्तेमाल नहीं किया जा रहा है, कृपया इसे बंद करें और एक घंटे बाद अपडेट करने की कोशिश करें.
403 कोड वाला प्रोजेक्ट नहीं मिल सका. पक्का करें कि आपने सही वैल्यू के लिए सही सेवा खाते का इस्तेमाल किया हो प्रोजेक्ट. ऐसा हो सकता है कि आपके खाते से जुड़े सेवा खाते का इस्तेमाल किया जा रहा हो प्रोजेक्ट. ज़्यादा जानें किसी प्रोजेक्ट से जुड़े सभी सेवा खातों को देखने का तरीका जानें.
403 कोड वाला सेवा खाते को आपका RISC ऐक्सेस करने के लिए अनुमति चाहिए कॉन्फ़िगरेशन अपने प्रोजेक्ट के पर जाएं और "RISC कॉन्फ़िगरेशन एडमिन" असाइन करें भूमिका (roles/riscconfigs.admin) आपके प्रोजेक्ट को कॉल करने के लिए, फ़ॉलो किया जा रहा है ये निर्देश.
403 कोड वाला स्ट्रीम मैनेजमेंट एपीआई को सिर्फ़ सेवा खाते से कॉल किया जाना चाहिए. यहाँ पर ज़्यादा जानकारी दी गई है: सेवा खाते से Google API को कॉल करने का तरीका.
403 कोड वाला डिलीवरी एंडपॉइंट आपके किसी भी प्रोजेक्ट के डोमेन से नहीं जुड़ा है. हर प्रोजेक्ट का एक सेट होता है अनुमति वाले डोमेन. अगर आपका डिलीवरी एंडपॉइंट (वह एंडपॉइंट जो आपको आरआईएससी इवेंट से मिलता है) डिलीवर किए जाने चाहिए) इनमें से किसी एक पर होस्ट नहीं किया गया है, तो हम चाहते हैं कि आप उस सेट के लिए एंडपॉइंट का डोमेन.
403 कोड वाला इस एपीआई का इस्तेमाल करने के लिए, आपके प्रोजेक्ट में कम से कम एक OAuth क्लाइंट कॉन्फ़िगर होना चाहिए. RISC सिर्फ़ तब काम करता है, जब आप ऐसा ऐप्लिकेशन बनाते हैं जो Google साइन इन. इस कनेक्शन के लिए, OAuth क्लाइंट ज़रूरी है. अगर आपके प्रोजेक्ट में कोई OAuth नहीं है क्लाइंट, यह संभावना है कि RISC आपके लिए उपयोगी नहीं होगा. ज़्यादा जानें Google के OAuth के इस्तेमाल के बारे में जानकारी हमारे एपीआई के लिए.
403 कोड वाला

स्थिति काम नहीं कर रही.

अमान्य स्थिति.

हम सिर्फ़ स्ट्रीम की स्थितियों “enabled” और अभी “disabled” है.
404 कोड वाला

प्रोजेक्ट में कोई RISC कॉन्फ़िगरेशन नहीं है.

प्रोजेक्ट में आरआईएससी का कोई मौजूदा कॉन्फ़िगरेशन नहीं है, इसलिए स्टेटस अपडेट नहीं किया जा सकता.

नया स्ट्रीम कॉन्फ़िगरेशन बनाने के लिए, https://risc.googleapis.com/v1beta/stream:update एंडपॉइंट पर कॉल करें.
4XX/5XX स्थिति अपडेट नहीं की जा सकी. ज़्यादा जानकारी के लिए, गड़बड़ी का पूरा मैसेज देखें.

टोकन के दायरे को ऐक्सेस करें

अगर आपको RISC API की पुष्टि करने के लिए ऐक्सेस टोकन इस्तेमाल करना है, तो ये वे दायरे होते हैं जिनके लिए आपके ऐप्लिकेशन को अनुरोध करना होगा:

एंडपॉइंट स्कोप
https://risc.googleapis.com/v1beta/stream/status https://www.googleapis.com/auth/risc.status.readonly अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है या https://www.googleapis.com/auth/risc.status.readwrite
https://risc.googleapis.com/v1beta/stream/status:update https://www.googleapis.com/auth/risc.status.readwrite
https://risc.googleapis.com/v1beta/stream https://www.googleapis.com/auth/risc.configuration.readonly अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है या https://www.googleapis.com/auth/risc.configuration.readwrite
https://risc.googleapis.com/v1beta/stream:update https://www.googleapis.com/auth/risc.configuration.readwrite
https://risc.googleapis.com/v1beta/stream:verify https://www.googleapis.com/auth/risc.verify

क्या आपको मदद चाहिए?

सबसे पहले, हमारा गड़बड़ी कोड का संदर्भ सेक्शन देखें. अगर आपको अब भी आपके कुछ सवाल हैं, तो उन्हें Stack Overflow पर #SecEvents टैग के साथ जोड़ा जा सकता है.