Hesaplar Arası Koruma ile kullanıcı hesaplarını koruyun

Uygulamanız, kullanıcıların Google'ı kullanarak hesaplarında oturum açmasına izin veriyorsa, Hesaplar Arası Koruma hizmeti tarafından sağlanan güvenlik etkinliği bildirimlerini dinleyerek ve yanıtlayarak bu paylaşılan kullanıcıların hesaplarının güvenliğini artırabilirsiniz.

Bu bildirimler, kullanıcılarınızın Google Hesaplarında yapılan ve genellikle uygulamanızla ilgili hesapları için güvenlikle ilgili sonuçları olabilecek büyük değişiklikler konusunda sizi uyarır. Örneğin, bir kullanıcının Google Hesabı ele geçirilirse, e-posta hesabı kurtarma veya tek oturum açma yoluyla kullanıcının uygulamanızdaki hesabının güvenliğinin ihlal edilmesine yol açabilir.

Bu tür olayların risk potansiyelini azaltmanıza yardımcı olmak için Google, güvenlik olayı belirteçleri adı verilen hizmet nesneleri gönderir. Bu belirteçler, yalnızca güvenlik olayının türü ve meydana geldiği zaman ve etkilenen kullanıcının tanımlayıcısı gibi çok az bilgiyi açığa çıkarır, ancak bunları yanıt olarak uygun eylemi gerçekleştirmek için kullanabilirsiniz. Örneğin, bir kullanıcının Google Hesabının güvenliği ihlal edilmişse, o kullanıcı için Google ile Oturum Aç'ı geçici olarak devre dışı bırakabilir ve hesap kurtarma e-postalarının kullanıcının Gmail adresine gönderilmesini engelleyebilirsiniz.

Hesaplar Arası Koruma, OpenID Foundation'da geliştirilen RISC standardını temel alır.

genel bakış

Uygulamanız veya hizmetinizle Hesaplar Arası Koruma'yı kullanmak için aşağıdaki görevleri tamamlamanız gerekir:

  1. Projenizi API Consolekurun.

  2. Google'ın güvenlik etkinliği belirteçlerini göndereceği bir etkinlik alıcısı uç noktası oluşturun. Bu uç nokta, aldığı belirteçleri doğrulamaktan ve ardından güvenlik olaylarına seçtiğiniz şekilde yanıt vermekten sorumludur.

  3. Güvenlik etkinliği belirteçlerini almaya başlamak için uç noktanızı Google'a kaydedin.

Önkoşul

Yalnızca hizmetinize profil bilgilerine veya e-posta adreslerine erişim izni vermiş olan Google kullanıcıları için güvenlik etkinliği belirteçleri alırsınız. Bu izni, profile veya email kapsamlarını talep ederek alırsınız. Daha yeni Google ile Oturum Açma veya eski Google Oturum Açma SDK'ları varsayılan olarak bu kapsamları ister, ancak varsayılan ayarları kullanmazsanız veya Google'ın OpenID Connect uç noktasına doğrudan erişirseniz, bunlardan en az birini talep ettiğinizden emin olun. kapsamlar.

API Consolebir proje oluşturun48

Güvenlik olayı belirteçlerini almaya başlamadan önce bir hizmet hesabı oluşturmanız veAPI Console projenizde RISC API'sini etkinleştirmeniz gerekir. Uygulamanızda Google ile Oturum Açma gibi Google hizmetlerine erişmek için kullandığınız aynıAPI Console projesini kullanmalısınız.

Hizmet hesabını oluşturmak için:

  1. l10n-yer tutucu51API ConsoleCredentials page açın. İstendiğinde, uygulamanızda Google hizmetlerine erişmek için kullandığınızAPI Consoleprojesini seçin.

  2. Kimlik bilgileri oluştur > Hizmet hesabı öğesini tıklayın.

  3. Düzenleyici rolüyle yeni bir hizmet hesabı oluşturun.

  4. Yeni oluşturduğunuz hizmet hesabınız için bir anahtar oluşturun. JSON anahtar türünü seçin ve ardından Oluştur'a tıklayın. Anahtar oluşturulduğunda, hizmet hesabı kimlik bilgilerinizi içeren bir JSON dosyası indireceksiniz. Bu dosyayı güvenli, ancak olay alıcı uç noktanızın erişebileceği bir yerde saklayın.

Projenizin Kimlik Bilgileri sayfasındayken, Google ile Oturum Açma veya Google ile Oturum Açma (eski) için kullandığınız müşteri kimliklerini de not edin. Tipik olarak, desteklediğiniz her platform için bir müşteri kimliğiniz vardır. Bir sonraki bölümde açıklandığı gibi, güvenlik olayı belirteçlerini doğrulamak için bu istemci kimliklerine ihtiyacınız olacak.

RISC API'sini etkinleştirmek için:

  1. API Consoleiçindeki RISC API sayfasını açın. Google hizmetlerine erişmek için kullandığınız projenin hala seçili olduğundan emin olun.

  2. RISC Koşullarını okuyun ve gereksinimleri anladığınızdan emin olun.

    API'yi bir kuruluşa ait bir proje için etkinleştiriyorsanız, kuruluşunuzu RISC Koşullarına bağlama yetkiniz olduğundan emin olun.

  3. Yalnızca RISC Koşullarını kabul ediyorsanız Etkinleştir'e tıklayın.

Bir olay alıcısı uç noktası oluşturun

Google'dan güvenlik olayı bildirimleri almak için HTTPS POST isteklerini işleyen bir HTTPS uç noktası oluşturursunuz. Bu uç noktayı kaydettikten sonra (aşağıya bakın), Google, güvenlik olayı belirteçleri adı verilen kriptografik olarak imzalanmış dizeleri uç noktaya göndermeye başlayacaktır. Güvenlik olayı belirteçleri, güvenlikle ilgili tek bir olay hakkında bilgi içeren imzalı JWT'lerdir.

Uç noktanızda aldığınız her güvenlik olayı belirteci için önce belirteci doğrulayın ve kodunun kodunu çözün, ardından güvenlik olayını hizmetinize uygun şekilde işleyin. Kötü aktörlerden gelen kötü niyetli saldırıları önlemek için kod çözmeden önce olay belirtecini doğrulamak önemlidir . Aşağıdaki bölümlerde bu görevler açıklanmaktadır:

1. Güvenlik olayı belirtecinin kodunu çözün ve doğrulayın

Güvenlik olayı belirteçleri belirli bir JWT türü olduğundan, bunların kodunu çözmek ve doğrulamak için jwt.io'da listelenenler gibi herhangi bir JWT kitaplığını kullanabilirsiniz. Hangi kitaplığı kullanırsanız kullanın, belirteç doğrulama kodunuz aşağıdakileri yapmalıdır:

  1. Google'ın https://accounts.google.com/.well-known/risc-configuration bulabileceğiniz RISC yapılandırma belgesinden Hesaplar Arası Korumayı veren tanımlayıcıyı ( issuer ) ve imzalama anahtarı sertifikası URI'sini ( jwks_uri ) alın.
  2. Seçtiğiniz JWT kitaplığını kullanarak, güvenlik olayı belirtecinin başlığından imzalama anahtarı kimliğini alın.
  3. Google'ın imza anahtarı sertifikası belgesinden, önceki adımda aldığınız anahtar kimliğiyle ortak anahtarı alın. Belge, aradığınız kimliğe sahip bir anahtar içermiyorsa, büyük olasılıkla güvenlik olayı belirteci geçersizdir ve uç noktanız HTTP hatası 400'ü döndürmelidir.
  4. Seçtiğiniz JWT kitaplığını kullanarak aşağıdakileri doğrulayın:
    • Güvenlik olayı belirteci, önceki adımda aldığınız ortak anahtar kullanılarak imzalanır.
    • Belirtecin aud talebi, uygulamalarınızın istemci kimliklerinden biridir.
    • Belirtecin iss iddiası, RISC keşif belgesinden aldığınız veren tanımlayıcıyla eşleşir. Güvenlik olayı belirteçleri geçmiş olayları temsil ettiğinden ve bu nedenle süresi dolmadığından belirtecin sona erme tarihini ( exp ) doğrulamanız gerekmediğini unutmayın.

Örneğin:

Java

Java-jwt ve jwks-rsa-java kullanarak:

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:
                // https://console.developers.google.com/apis/credentials?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;
}

piton

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:
# https://console.developers.google.com/apis/credentials?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)

Belirteç geçerliyse ve kodu başarıyla çözüldüyse, HTTP durumu 202'yi döndürün. Ardından belirteç tarafından belirtilen güvenlik olayını işleyin.

2. Güvenlik olaylarını ele alın

Kodu çözüldüğünde, bir güvenlik olayı belirteci aşağıdaki örneğe benzer:

{
  "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 ve aud iddiaları, jetonu vereni (Google) ve jetonun amaçlanan alıcısını (hizmetiniz) gösterir. Bu iddiaları önceki adımda doğruladınız.

jti talebi, tek bir güvenlik olayını tanımlayan ve akışa özgü bir dizedir. Hangi güvenlik olaylarını aldığınızı izlemek için bu tanımlayıcıyı kullanabilirsiniz.

events talebi, belirtecin temsil ettiği güvenlik olayı hakkında bilgi içerir. Bu talep, bir olay türü tanımlayıcısından, bu olayın ilgili olduğu kullanıcıyı belirten bir subject talebine ve olayla ilgili mevcut olabilecek ek ayrıntılara eşlemedir.

Söz subject hak talebi, belirli bir kullanıcıyı, kullanıcının benzersiz Google Hesap Kimliği ( sub ) ile tanımlar. Bu Google Hesabı Kimliği, daha yeni Google ile Oturum Açma ( Javascript , HTML ) kitaplığı, eski Google Oturum Açma kitaplığı veya OpenID Connect tarafından verilen JWT Kimliği belirteçlerinde bulunan aynı tanımlayıcıdır ( sub ). subject_type id_token_claims , kullanıcının e-posta adresini içeren bir email alanı da içerebilir.

Belirtilen kullanıcının hesabında olay türü için uygun eylemi gerçekleştirmek için events talebindeki bilgileri kullanın.

Desteklenen olay türleri

Hesaplar Arası Koruma, aşağıdaki güvenlik olayı türlerini destekler:

Etkinlik tipi Öznitellikler Nasıl karşılık verilir
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked Gerekli : Şu anda açık olan oturumlarını sonlandırarak kullanıcının hesabının güvenliğini yeniden sağlayın.
https://schemas.openid.net/secevent/oauth/event-type/tokens-revoked

Gerekli : Belirteç Google ile Oturum Açma içinse, açık olan oturumlarını sonlandırın. Ek olarak, kullanıcıya alternatif bir oturum açma yöntemi ayarlamasını önermek isteyebilirsiniz.

Önerilen : Belirteç diğer Google API'lerine erişim içinse, kullanıcının sakladığınız OAuth belirteçlerinden herhangi birini silin.

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

Gerekli : Hesabın devre dışı bırakılmasının nedeni hijacking ise, o anda açık olan oturumlarını sonlandırarak kullanıcının hesabının güvenliğini yeniden sağlayın.

Önerilen : Hesabın devre dışı bırakılmasının nedeni bulk-account ise, kullanıcının hizmetinizdeki etkinliğini analiz edin ve uygun takip işlemlerini belirleyin.

Önerilen : Herhangi bir neden belirtilmediyse, kullanıcı için Google ile Oturum Açmayı devre dışı bırakın ve kullanıcının Google Hesabı ile ilişkili e-posta adresini kullanarak hesap kurtarmayı devre dışı bırakın (genellikle, ancak mutlaka bir Gmail hesabı değildir). Kullanıcıya alternatif bir oturum açma yöntemi sunun.

https://schemas.openid.net/secevent/risc/event-type/account-enabled Önerilen : Kullanıcı için Google ile Oturum Açmayı yeniden etkinleştirin ve kullanıcının Google Hesabı e-posta adresiyle hesap kurtarmayı yeniden etkinleştirin.
https://schemas.openid.net/secevent/risc/event-type/account-purged Önerilen : Kullanıcının hesabını silin veya ona alternatif bir oturum açma yöntemi sağlayın.
https://schemas.openid.net/secevent/risc/event-type/account-credential-change-required Önerilen : Hizmetinizde şüpheli etkinlik olup olmadığına dikkat edin ve uygun işlemi yapın.
https://schemas.openid.net/secevent/risc/event-type/verification durum= state Önerilen : Bir test jetonunun alındığını günlüğe kaydedin.

Yinelenen ve kaçırılan olaylar

Hesaplar Arası Koruma, iletilmediğine inandığı olayları yeniden iletmeye çalışır. Bu nedenle, bazen aynı olayı birden çok kez alabilirsiniz. Bu, kullanıcılarınızı rahatsız eden tekrarlanan eylemlere neden olabilirse, olayların tekilliğini kaldırmak için jti talebini (bir olay için benzersiz bir tanımlayıcıdır) kullanmayı düşünün. Tekilleştirme veri akışını yürütmenize yardımcı olabilecek Google Cloud Dataflow gibi harici araçlar vardır.

Olayların sınırlı yeniden denemelerle iletildiğini unutmayın, bu nedenle alıcınız uzun bir süre kapalı kalırsa bazı olayları kalıcı olarak kaçırabilirsiniz.

Alıcınızı kaydedin

Güvenlik olaylarını almaya başlamak için RISC API'sini kullanarak alıcı uç noktanızı kaydedin. RISC API'sine yapılan çağrılara bir yetkilendirme belirteci eşlik etmelidir.

Yalnızca uygulamanızın kullanıcıları için güvenlik olayları alacaksınız; bu nedenle, aşağıda açıklanan adımlar için ön koşul olarak GCP projenizde yapılandırılmış bir OAuth izin ekranına sahip olmanız gerekir.

1. Yetkilendirme belirteci oluşturun

RISC API için bir yetkilendirme belirteci oluşturmak için aşağıdaki taleplere sahip bir JWT oluşturun:

{
  "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
}

Hizmet hesabı anahtarını oluşturduğunuzda indirdiğiniz JSON dosyasında bulabileceğiniz hizmet hesabınızın özel anahtarını kullanarak JWT'yi imzalayın.

Örneğin:

Java

Java-jwt ve Google'ın auth kitaplığını kullanarak:

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;
}

piton

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')

Bu yetkilendirme belirteci, bir saat boyunca RISC API çağrıları yapmak için kullanılabilir. Belirtecin süresi dolduğunda, RISC API çağrıları yapmaya devam etmek için yeni bir tane oluşturun.

2. RISC akış yapılandırma API'sini çağırın

Artık bir yetkilendirme jetonunuz olduğuna göre, alıcı uç noktanızın kaydedilmesi de dahil olmak üzere projenizin güvenlik olay akışını yapılandırmak için RISC API'sini kullanabilirsiniz.

Bunu yapmak için, alıcı uç noktanızı ve ilgilendiğiniz güvenlik olayı türlerini belirterek https://risc.googleapis.com/v1beta/stream:update bir HTTPS POST isteği gönderin:

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
  ]
}

Örneğin:

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);

piton

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'])

İstek HTTP 200'ü döndürürse, olay akışı başarıyla yapılandırılmıştır ve alıcı uç noktanız güvenlik olayı belirteçlerini almaya başlamalıdır. Sonraki bölüm, her şeyin birlikte doğru şekilde çalıştığını doğrulamak için akış yapılandırmanızı ve uç noktanızı nasıl test edebileceğinizi açıklar.

Mevcut akış yapılandırmanızı alın ve güncelleyin

Gelecekte akış yapılandırmanızı değiştirmek isterseniz, geçerli akış yapılandırmasını almak için https://risc.googleapis.com/v1beta/stream yetkili bir GET isteğinde bulunarak ve yanıt gövdesini değiştirerek bunu yapabilirsiniz. , ve ardından değiştirilen konfigürasyonu yukarıda açıklandığı gibi https://risc.googleapis.com/v1beta/stream:update POST gönderme.

Etkinlik akışını durdurun ve devam ettirin

Google'dan gelen etkinlik akışını durdurmanız gerekirse, istek gövdesinde https://risc.googleapis.com/v1beta/stream/status:update ile { "status": "disabled" } adresine yetkili bir POST isteğinde bulunun. Akış devre dışı bırakıldığında Google, olayları uç noktanıza göndermez ve güvenlik olaylarını meydana geldiklerinde arabelleğe almaz. Olay akışını yeniden etkinleştirmek için, aynı uç noktaya POST { "status": "enabled" } .

3. İsteğe bağlı: Akış yapılandırmanızı test edin

Etkinlik akışınız aracılığıyla bir doğrulama belirteci göndererek akış yapılandırmanızın ve alıcı uç noktanızın birlikte doğru çalıştığını doğrulayabilirsiniz. Bu belirteç, belirtecin uç noktanızda alındığını doğrulamak için kullanabileceğiniz benzersiz bir dize içerebilir.

Doğrulama belirteci istemek için https://risc.googleapis.com/v1beta/stream:verify yetkili bir HTTPS POST isteğinde bulunun. İsteğin gövdesinde, bir tanımlayıcı dize belirtin:

{
  "state": "ANYTHING"
}

Örneğin:

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);

piton

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()))

İstek başarılı olursa, doğrulama jetonu kaydettiğiniz uç noktaya gönderilir. Ardından, örneğin, uç noktanız doğrulama belirteçlerini yalnızca günlüğe kaydederek işliyorsa, belirtecin alındığını doğrulamak için günlüklerinizi inceleyebilirsiniz.

Hata kodu referansı

RISC API tarafından aşağıdaki hatalar döndürülebilir:

Hata kodu Hata mesajı Önerilen eylemler
400 Akış yapılandırması $fieldname alanı içermelidir. https://risc.googleapis.com/v1beta/stream:update uç noktasına yönelik isteğiniz geçersiz veya ayrıştırılamıyor. Lütfen isteğinize $fieldname ekleyin.
401 Yetkisiz. Yetkilendirme başarısız oldu. İsteğe bir yetkilendirme belirteci eklediğinizden ve belirtecin geçerli olduğundan ve süresinin dolmadığından emin olun.
403 Teslimat uç noktası bir HTTPS URL'si olmalıdır. Teslimat uç noktanız (yani, RISC olaylarının teslim edilmesini beklediğiniz uç nokta) HTTPS olmalıdır. RISC olaylarını HTTP URL'lerine göndermiyoruz.
403 Mevcut akış yapılandırması, RISC için spesifikasyonla uyumlu teslim yöntemine sahip değil. Google Cloud projeniz zaten bir RISC yapılandırmasına sahip olmalıdır. Firebase kullanıyorsanız ve Google ile Oturum Açmayı etkinleştirdiyseniz, Firebase projeniz için RISC'yi yönetecektir; özel bir yapılandırma oluşturamazsınız. Firebase projeniz için Google Sign-In'i kullanmıyorsanız, lütfen devre dışı bırakın ve bir saat sonra tekrar güncellemeyi deneyin.
403 Proje bulunamadı. Doğru proje için doğru hizmet hesabını kullandığınızdan emin olun. Silinen bir projeyle ilişkili bir hizmet hesabı kullanıyor olabilirsiniz. Bir projeyle ilişkili tüm hizmet hesaplarını nasıl göreceğinizi öğrenin.
403 Hizmet hesabı, projenizde düzenleyici izinlerine sahip olmalıdır. Projenizin Google Cloud Platform konsoluna gidin ve bu talimatları izleyerek projenize çağrı düzenleyici/sahip izni veren hizmet hesabına izin verin.
403 Akış yönetimi API'leri yalnızca bir hizmet hesabı tarafından çağrılmalıdır. Bir hizmet hesabıyla Google API'lerini nasıl çağırabileceğinizle ilgili daha fazla bilgiyi burada bulabilirsiniz.
403 Teslim uç noktası, projenizin etki alanlarından hiçbirine ait değil. Her projenin bir dizi yetkili etki alanı vardır. Teslim uç noktanız (yani, RISC olaylarının teslim edilmesini beklediğiniz uç nokta) bunlardan birinde barındırılmıyorsa, uç noktanın etki alanını bu kümeye eklemeniz gerekir.
403 Bu API'yi kullanmak için projenizde yapılandırılmış en az bir OAuth istemcisi olmalıdır. RISC, yalnızca Google Sign In'i destekleyen bir uygulama oluşturursanız çalışır. Bu bağlantı bir OAuth istemcisi gerektirir. Projenizde OAuth istemcisi yoksa, büyük olasılıkla RISC sizin için yararlı olmayacaktır. Google'ın API'lerimiz için OAuth kullanımı hakkında daha fazla bilgi edinin.
403

Desteklenmeyen durum.

Geçersiz durum.

Şu anda yalnızca " enabled " ve " disabled " akış durumlarını destekliyoruz.
404

Projede RISC yapılandırması yok.

Projede mevcut bir RISC yapılandırması yok, durumu güncelleyemiyor.

Yeni bir akış yapılandırması oluşturmak için https://risc.googleapis.com/v1beta/stream:update uç noktasını arayın.
4XX/5XX Durum güncellenemiyor. Daha fazla bilgi için ayrıntılı hata mesajını kontrol edin.

Erişim belirteci kapsamları

RISC API'sinde kimlik doğrulaması yapmak için erişim belirteçlerini kullanmaya karar verirseniz, uygulamanızın talep etmesi gereken kapsamlar şunlardır:

uç nokta Kapsam
https://risc.googleapis.com/v1beta/stream/status https://www.googleapis.com/auth/risc.status.readonly VEYA 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 VEYA 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

Yardıma mı ihtiyacınız var?

İlk olarak, hata kodu referans bölümümüzü inceleyin. Hâlâ sorularınız varsa, bunları #SecEvents etiketiyle Stack Overflow'ta yayınlayın.