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ı hesaplarının güvenliğini artırabilirsiniz.
Bu bildirimler, kullanıcılarınızın Google Hesaplarında yapılan önemli değişiklikler konusunda sizi uyarır. Bu değişiklikler, genellikle uygulamanızdaki hesapları için de güvenlikle ilgili sonuçlar doğurabilir. Örneğin, bir kullanıcının Google Hesabı ele geçirilirse e-posta hesabı kurtarma veya tek oturum açma özelliğinin kullanılması yoluyla kullanıcının uygulamanızdaki hesabının güvenliği ihlal edilebilir.
Google, bu tür etkinliklerin risk potansiyelini azaltmanıza yardımcı olmak için güvenlik etkinliği jetonları adlı hizmet nesnelerinizi gönderir. Bu jetonlar çok az bilgi (yalnızca güvenlik etkinliğinin türü, ne zaman gerçekleştiği ve etkilenen kullanıcının tanımlayıcısını) gösterir ancak bunlara uygun şekilde yanıt vermek için başvurabilirsiniz. Örneğin, bir kullanıcının Google Hesabı'nın güvenliği ihlal edilmişse söz konusu kullanıcı için Google ile oturum açma özelliğini geçici olarak devre dışı bırakabilir ve hesap kurtarma e-postalarının kullanıcının Gmail adresine gönderilmesini önleyebilirsiniz.
Hesaplar Arası Koruma, OpenID Foundation'da geliştirilen RISC standardına dayanır.
Genel Bakış
Hesaplar Arası Koruma'yı uygulamanız veya hizmetinizle kullanmak için aşağıdaki görevleri tamamlamanız gerekir:
Projenizi 'te oluşturun.
Google'ın güvenlik etkinliği jetonlarını göndereceği bir etkinlik alıcı uç noktası oluşturun. Bu uç nokta, aldığı jetonları doğrulamaktan ve ardından güvenlik etkinliklerine seçtiğiniz şekilde yanıt vermekten sorumludur.
Güvenlik etkinliği jetonları almaya başlamak için uç noktanızı Google'a kaydedin.
Ön koşul
Yalnızca hizmetinize profil bilgilerine veya e-posta adreslerine erişme izni veren Google kullanıcıları için güvenlik etkinliği jetonları alırsınız. Bu izni profile
veya email
kapsamlarını isteyerek alırsınız. Yeni Google ile oturum açma veya eski Google ile oturum açma SDK'ları varsayılan olarak bu kapsamları ister ancak varsayılan ayarları kullanmıyorsanız veya Google'ın OpenID Connect uç noktasına doğrudan erişiyorsanız bu kapsamlardan en az birini istediğinizden emin olun.
Güvenlik etkinliği jetonları almaya başlamadan önce bir hizmet hesabı oluşturmanız ve projenizde RISC API'yi etkinleştirmeniz gerekir. Uygulamanızda Google hizmetlerine (ör. Google ile oturum açma) erişmek için kullandığınız projeyi kullanmanız gerekir.
Hizmet hesabını oluşturmak için:
simgesini açın. İstendiğinde, uygulamanızda Google hizmetlerine erişmek için kullandığınız projeyi seçin.
Kimlik bilgisi oluştur > Hizmet hesabı'nı tıklayın.
Bu talimatları uygulayarak RISC Configuration Yöneticisi rolüne (
roles/riscconfigs.admin
) sahip yeni bir hizmet hesabı oluşturun.Yeni oluşturduğunuz hizmet hesabı için bir anahtar oluşturun. JSON anahtar türünü seçin ve ardından Oluştur'u tıklayın. Anahtar oluşturulduğunda, hizmet hesabı kimlik bilgilerinizi içeren bir JSON dosyası indirirsiniz. Bu dosyayı, güvenli bir yerde saklayın ancak etkinlik alıcı uç noktanız tarafından erişilebilir durumda tutun.
Projenizin Kimlik Bilgileri sayfasındayken Google ile oturum aç veya Google Hesabı (eski) için kullandığınız istemci kimliklerini de not edin. Genellikle desteklediğiniz her platform için bir istemci kimliğiniz vardır. Güvenlik etkinliği jetonlarını doğrulamak için bu istemci kimliklerine ihtiyacınız vardır. Bu konu bir sonraki bölümde açıklanmıştır.
RISC API'yi etkinleştirmek için:
'de RISC API sayfasını açın. Google hizmetlerine erişmek için kullandığınız projenin hâlâ seçili olduğundan emin olun.
RISC Şartları'nı okuyun ve şartları anladığınızdan emin olun.
API'yi bir kuruluşa ait bir proje için etkinleştiriyorsanız kuruluşunuzu RISC Şartları'na bağlama yetkiniz olduğundan emin olun.
Yalnızca RISC Şartları'nı kabul ediyorsanız Etkinleştir'i tıklayın.
Etkinlik alıcı uç noktası oluşturma
Google'dan güvenlik etkinliği 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, uç noktaya güvenlik etkinliği jetonları adı verilen kriptografik olarak imzalanmış dizeler yayınlamaya başlar. Güvenlik etkinliği jetonları, güvenlikle ilgili tek bir etkinlikle ilgili bilgileri içeren imzalı JWT'lerdir.
Bitiş noktanızda aldığınız her güvenlik etkinliği jetonu için önce jetonu doğrulayın ve kodunu çözün, ardından güvenlik etkinliğini hizmetinize uygun şekilde işleyin. Kötü niyetli kişilerin kötü amaçlı saldırılarını önlemek için kod çözme işleminden önce etkinlik jetonunu doğrulamak zorunludur. Aşağıdaki bölümlerde bu görevler açıklanmaktadır:
1. Güvenlik etkinliği jetonunun kodunu çözme ve doğrulama
Güvenlik etkinliği jetonları belirli bir JWT türü olduğundan, kodlarını çözmek ve doğrulamak için jwt.io'da listelenenler gibi herhangi bir JWT kitaplığını kullanabilirsiniz. Hangi kitaplığı kullanırsanız kullanın jeton doğrulama kodunuz aşağıdakileri yapmalıdır:
- Hesaplar Arası Koruma sağlayıcı tanımlayıcısı (
issuer
) ve imzalama anahtarı sertifika URI'sini (jwks_uri
), Google'ın RISC yapılandırma belgesinden alın. Bu belgeyehttps://accounts.google.com/.well-known/risc-configuration
adresinden ulaşabilirsiniz. - Tercih ettiğiniz JWT kitaplığını kullanarak güvenlik etkinliği jetonunun başlığından imzalama anahtarı kimliğini alın.
- Google'ın imzalama anahtarı sertifika 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 güvenlik etkinliği jetonu geçersizdir ve uç noktanız HTTP 400 hatası döndürmelidir.
- Seçtiğiniz JWT kitaplığını kullanarak aşağıdakileri doğrulayın:
- Güvenlik etkinliği jetonu, önceki adımda aldığınız ortak anahtar kullanılarak imzalanır.
- Jetonun
aud
hak talebi, uygulamalarınızın istemci kimliklerinden biridir. - Jetonun
iss
iddiası, RISC keşif belgesinden aldığınız sağlayıcı tanımlayıcısıyla eşleşiyor. Güvenlik etkinliği jetonları geçmiş etkinlikleri temsil ettiğinden ve bu nedenle geçerlilik süresi sona ermediğinden jetonun geçerlilik süresinin (exp
) doğrulanması gerekmez.
Örneğin:
Java
java-jwt ve jwks-rsa-java kullanılarak:
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)
Jeton geçerliyse ve kodu başarıyla çözüldüyse HTTP 202 durum kodunu döndürün. Ardından, jeton tarafından belirtilen güvenlik etkinliğini ele alın.
2. Güvenlik olaylarını işleme
Güvenlik etkinliği jetonunun kodu çözüldüğünde 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ı, jetonun sağlayıcısını (Google) ve jetonun amaçlanan alıcısını (hizmetiniz) belirtir. Bu hak taleplerini önceki adımda doğruladınız.
jti
iddiası, tek bir güvenlik etkinliğini tanımlayan ve akışa özgü bir dizedir. Hangi güvenlik etkinliklerini aldığınızı izlemek için bu tanımlayıcıyı kullanabilirsiniz.
events
iddiası, jetonun temsil ettiği güvenlik etkinliği hakkında bilgi içerir. Bu hak talebi, bir etkinlik türü tanımlayıcısından subject
hak talebine bir eşlemedir. Bu hak talebi, söz konusu etkinliğin ilgili olduğu kullanıcıyı ve etkinlikle ilgili mevcut olabilecek diğer ayrıntıları belirtir.
subject
iddiası, belirli bir kullanıcıyı kullanıcının benzersiz Google Hesabı kimliğiyle (sub
) tanımlar. Bu Google Hesabı kimliği, yeni Google ile oturum açma (Javascript, HTML) kitaplığı, eski Google ile oturum açma kitaplığı veya OpenID Connect tarafından yayınlanan JWT kimlik jetonlarında bulunan aynı tanımlayıcıdır (sub
). Hak talebinin subject_type
değeri id_token_claims
olduğunda, kullanıcının e-posta adresini içeren bir email
alanı da içerebilir.
Belirtilen kullanıcının hesabındaki etkinlik türü için uygun işlemi yapmak üzere events
hak talebindeki bilgileri kullanın.
OAuth jetonu tanımlayıcıları
Tekil jetonlarla ilgili OAuth etkinlikleri için token subject (Jeton konusu) tanımlayıcı türü aşağıdaki alanları içerir:
token_type
: Yalnızcarefresh_token
desteklenir.token_identifier_alg
: Olası değerler için aşağıdaki tabloya bakın.token
: Aşağıdaki tabloya bakın.
token_identifier_alg | token |
---|---|
prefix |
Jetonun ilk 16 karakteri. |
hash_base64_sha512_sha512 |
SHA-512 kullanılarak jetonun çift karması. |
Bu etkinliklerle entegrasyon yaparsanız etkinlik alındığında hızlı bir eşleşme sağlamak için jetonlarınızı bu olası değerlere göre dizine eklemeniz önerilir.
Desteklenen etkinlik türleri
Hesaplar Arası Koruma, aşağıdaki güvenlik etkinliği türlerini destekler:
Etkinlik Türü | Özellikler | Yanıt verme |
---|---|---|
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked |
Zorunlu: Kullanıcının açık oturumlarını sonlandırarak hesabının güvenliğini yeniden sağlayın. | |
https://schemas.openid.net/secevent/oauth/event-type/tokens-revoked |
Zorunlu: Jeton Google ile oturum açma içinse kullanıcının açık oturumlarını sonlandırın. Ayrıca, kullanıcıya alternatif bir oturum açma yöntemi oluşturmasını önerebilirsiniz. Önerilir: Jeton diğer Google API'lerine erişim içinse kullanıcının saklamış olduğunuz OAuth jetonlarını silin. |
|
https://schemas.openid.net/secevent/oauth/event-type/token-revoked |
Jeton tanımlayıcıları için OAuth jetonu tanımlayıcıları bölümüne bakın. |
Zorunlu: İlgili yenileme jetonunu saklarsanız silin ve kullanıcıdan bir sonraki erişim jetonu gerektiğinde yeniden izin vermesini isteyin. |
https://schemas.openid.net/secevent/risc/event-type/account-disabled |
reason=hijacking ,reason=bulk-account |
Zorunlu: Hesabın devre dışı bırakılmasının nedeni Önerilen: Hesabın devre dışı bırakılma nedeni Önerilir: Herhangi bir neden belirtilmediyse kullanıcı için Google ile oturum açma özelliğini devre dışı bırakın ve kullanıcının Google Hesabı ile ilişkili e-posta adresini (genellikle bir Gmail hesabıdır ancak her zaman Gmail hesabı olmayabilir) kullanarak hesap kurtarma özelliğini devre dışı bırakın. Kullanıcıya alternatif bir oturum açma yöntemi sunun. |
https://schemas.openid.net/secevent/risc/event-type/account-enabled |
Önerilir: Kullanıcı için Google ile oturum açma özelliğini ve kullanıcının Google Hesabı e-posta adresiyle hesap kurtarma özelliğini yeniden etkinleştirin. | |
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 |
state=state | Önerilen: Test jetonunun alındığını kaydedin. |
Yinelenen ve kaçırılan etkinlikler
Hesaplar Arası Koruma, yayınlanmadığını düşündüğü etkinlikleri yeniden yayınlamaya çalışır. Bu nedenle, bazen aynı etkinliği birden fazla kez alabilirsiniz. Bu durum, kullanıcılarınızın işine yarayan tekrarlanan işlemlere neden oluyorsa etkinlikleri tekilleştirmek için jti
iddiasını (bir etkinlik için benzersiz bir tanımlayıcıdır) kullanabilirsiniz. Verileri tekilleştirme akışını yürütmenize yardımcı olabilecek Google Cloud Dataflow gibi harici araçlar vardır.
Etkinliklerin sınırlı sayıda yeniden denemeyle yayınlandığını unutmayın. Bu nedenle, alıcınız uzun süre boyunca çevrimdışıysa bazı etkinlikleri kalıcı olarak kaçırabilirsiniz.
Alıcınızı kaydettirme
Güvenlik etkinlikleri almaya başlamak için RISC API'yi kullanarak alıcı uç noktanızı kaydedin. RISC API'sine yapılan çağrılara bir yetkilendirme jetonu eklenmelidir.
Yalnızca uygulamanızın kullanıcılarına ait güvenlik etkinlikleri alırsınız. Bu nedenle, aşağıda açıklanan adımların ön koşulu olarak GCP projenizde bir OAuth izin ekranının yapılandırılmış olması gerekir.
1. Yetkilendirme jetonu oluşturma
RISC API için yetkilendirme jetonu oluşturmak üzere aşağıdaki iddiaları içeren 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ştururken 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 kimlik doğrulama 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;
}
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')
Bu yetkilendirme jetonu, bir saat boyunca RISC API çağrıları yapmak için kullanılabilir. Jetonun süresi dolduğunda RISC API çağrıları yapmaya devam etmek için yeni bir jeton oluşturun.
2. RISC akış yapılandırması API'sini çağırma
Yetkilendirme jetonunuz olduğu için alıcı uç noktanızı kaydettirmek de dahil olmak üzere projenizin güvenlik etkinlik akışını yapılandırmak için RISC API'yi kullanabilirsiniz.
Bunu yapmak için https://risc.googleapis.com/v1beta/stream:update
adresine bir HTTPS POST isteği gönderin. Bu istekte alıcı uç noktanızı ve ilgilendiğiniz güvenlik etkinliği türlerini belirtin:
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);
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'])
İstek HTTP 200 döndürüyorsa etkinlik akışı başarıyla yapılandırılmış demektir ve alıcı uç noktanız güvenlik etkinliği jetonlarını almaya başlar. Sonraki bölümde, her şeyin birlikte düzgün şekilde çalıştığını doğrulamak için aktarma yapılandırmanızı ve uç noktanızı nasıl test edebileceğiniz açıklanmaktadır.
Mevcut yayın yapılandırmanızı alma ve güncelleme
Gelecekte yayın yapılandırmanızı değiştirmek isterseniz mevcut yayın yapılandırmasını almak için https://risc.googleapis.com/v1beta/stream
adresine yetkili bir GET isteği göndererek, yanıt gövdesini değiştirerek ve ardından değiştirilmiş yapılandırmayı yukarıda açıklandığı gibi https://risc.googleapis.com/v1beta/stream:update
adresine POST göndererek bunu yapabilirsiniz.
Etkinlik akışını durdurma ve devam ettirme
Google'dan gelen etkinlik akışını durdurmanız gerekirse istek gövdesinde { "status": "disabled" }
ile https://risc.googleapis.com/v1beta/stream/status:update
adresine yetkili bir POST isteği gönderin. Akış devre dışıyken Google, uç noktanıza etkinlik göndermez ve gerçekleşen güvenlik etkinliklerini arabelleğe almaz. Etkinlik akışını yeniden etkinleştirmek için { "status": "enabled" }
öğesini aynı uç noktaya POST gönderin.
3. İsteğe bağlı: Akış yapılandırmanızı test etme
Akış yapılandırmanızın ve alıcı uç noktasının birlikte doğru şekilde çalıştığını doğrulamak için etkinlik akışınız üzerinden bir doğrulama jetonu gönderebilirsiniz. Bu jeton, jetonun uç noktanızda alındığını doğrulamak için kullanabileceğiniz benzersiz bir dize içerebilir. Bu akışı kullanmak için alıcınızı kaydederken https://schemas.openid.net/secevent/risc/event-type/verification etkinlik türüne abone olun.
Doğrulama jetonu istemek için https://risc.googleapis.com/v1beta/stream:verify
adresine yetkili bir HTTPS POST isteği gönderin. İsteğin gövde bölümünde, tanımlayıcı bir 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);
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()))
İstek başarılı olursa doğrulama jetonu, kaydettiğiniz uç noktaya gönderilir. Örneğin, uç noktanız doğrulama jetonlarını yalnızca günlüğe kaydederek işlerse jetonun alındığını onaylamak için günlüklerinizi inceleyebilirsiniz.
Hata kodu referansı
RISC API aşağıdaki hataları döndürebilir:
Hata Kodu | Hata Mesajı | Önerilen İşlemler |
---|---|---|
400 | Akış yapılandırması $fieldname alanını içermelidir. | https://risc.googleapis.com/v1beta/stream:update uç noktasına gönderdiğiniz istek geçersiz veya ayrıştırılamıyor. Lütfen isteğinize $fieldname değerini ekleyin. |
401 | Yetkilendirilmedi. | Yetkilendirme başarısız oldu. İsteğe bir yetkilendirme jetonu eklediğinizden ve jetonun geçerli olduğundan ve süresinin dolmadığından emin olun. |
403 | Yayınlama uç noktası bir HTTPS URL'si olmalıdır. | Yayınlama uç noktanız (yani RISC etkinliklerinin yayınlanmasını beklediğiniz uç nokta) HTTPS olmalıdır. RISC etkinlikleri HTTP URL'lerine gönderilmez. |
403 | Mevcut akış yapılandırmasında RISC için spesifikasyonlara uygun yayınlama yöntemi yok. | Google Cloud projenizde zaten bir RISC yapılandırması olmalıdır. Firebase kullanıyorsanız ve Google ile oturum açma özelliğini etkinleştirdiyseniz Firebase, projeniz için RISC'yi yönetir. Özel yapılandırma oluşturamazsınız. Firebase projeniz için Google ile Oturum Açma özelliğini 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ının RISC yapılandırmanıza erişmesi için izne ihtiyacı var | Projenizin ve "RISC Yapılandırma Yöneticisi" rolünü
(roles/riscconfigs.admin )
bu talimatları izleyerek projenize çağrı gönderen hizmet hesabına atayın.
|
403 | Akış yönetimi API'leri yalnızca bir hizmet hesabı tarafından çağrılmalıdır. | Hizmet hesabıyla Google API'lerini nasıl çağırabileceğiniz hakkında daha fazla bilgi edinin. |
403 | Yayınlama uç noktası, projenizin alan adlarından hiçbirine ait değil. | Her projenin bir dizi yetkili alanı vardır. Yayınlama uç noktanız (ör. RISC etkinliklerinin yayınlanmasını beklediğiniz uç nokta) bunlardan birinde barındırılmıyorsa uç noktanın alanını bu gruba eklemeniz gerekir. |
403 | Bu API'yi kullanmak için projenizde en az bir OAuth istemcisi yapılandırılmış olmalıdır. | RISC yalnızca Google ile oturum açma özelliğini destekleyen bir uygulama geliştirirseniz çalışır. Bu bağlantı için bir OAuth istemcisi gerekir. Projenizde OAuth istemcisi yoksa RISC'nin sizin için yararlı olması muhtemel değildir. Google'ın API'lerimiz için OAuth'u kullanımı hakkında daha fazla bilgi edinin. |
403 |
Desteklenmeyen durum. Geçersiz durum. |
Şu anda yalnızca "enabled " ve "disabled " yayın durumlarını destekliyoruz. |
404 |
Projede RISC yapılandırması yok. Projede mevcut bir RISC yapılandırması yok, durum güncellenemiyor. |
Yeni bir canlı yayın yapılandırması oluşturmak için https://risc.googleapis.com/v1beta/stream:update uç noktasını çağırın. |
4XX/5XX | Durum güncellenemedi. | Daha fazla bilgi için ayrıntılı hata mesajını kontrol edin. |
Erişim jetonu kapsamları
RISC API'sinde kimlik doğrulaması yapmak için erişim jetonları kullanmaya karar verirseniz uygulamanızın istemesi 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ım mı Gerekiyor?
Öncelikle hata kodu referans bölümümüze göz atın. Hâlâ sorularınız varsa bunları #SecEvents etiketiyle Stack Overflow'da yayınlayabilirsiniz.