Google OAuth 2.0 sistemi, bir web sitesi ve bir web sunucusu arasındaki etkileşim gibi ve Google hizmetini kullanabilirsiniz. Bu senaryo için, sizin açınızdan sona eren bir hizmet hesabına bireysel bir son kullanıcıya değil, uygulamanıza ait bir hesaptır. Sizin Uygulama, hizmet hesabı adına Google API'lerini çağırır. Dolayısıyla kullanıcılar dahil edilir. Bu senaryoya bazen "iki aşamalı OAuth" adı verilir. veya "2LO" gibi bir ifade kullanabilirsiniz. (İlgili terim, "üç aşamalı OAuth" uygulamanızın adına Google API'lerini çağırdığı senaryolardır ve bazen kullanıcı izninin gerekli olduğu işlemlerdir.)
Genellikle bir uygulama, çalışmak üzere Google API'lerini kullandığında bir hizmet hesabı kullanır kullanıcıya ait veriler yerine kendi verileri kullanılarak oluşturulabilir. Örneğin, Google Cloud Veri kalıcılığı için Datastore, Google Cloud Datastore API.
Google Workspace alan yöneticileri şunları da yapabilir: hizmet hesaplarına alan genelinde yetki ver Google'daki verileri saklamadığını unutmayın.
Bu belgede, bir uygulamanın sunucudan sunucuya OAuth 2.0 akışını; Google API'leri istemci kitaplığı (önerilir) veya HTTP kullanarak.
Genel Bakış
Sunucudan sunucuya etkileşimleri desteklemek amacıyla önce şu konumda projeniz için bir hizmet hesabı oluşturun: API Console. Şuradaki kullanıcılara ait kullanıcı verilerine erişmek istiyorsanız: Google Workspace hesabınızı açın, ardından hizmet hesabına alan genelinde erişim yetkisi verin.
Ardından, uygulamanız, hizmet hesabının kimlik bilgileri (OAuth 2.0 yetkilendirme sunucusundan erişim jetonu isteme)
Son olarak, uygulamanız Google API'lerini çağırmak için erişim jetonunu kullanabilir.
Hizmet hesabı oluşturma
Bir hizmet hesabının kimlik bilgileri; benzersiz ve en azından değer düzeyinde oluşturulmuş bir e-posta adresi içerir. bir ortak/özel anahtar çifti olmalıdır. Alan genelinde yetki etkinse istemci kimliği de kimlik bilgilerinden yararlanırız.
Uygulamanız Google App Engine üzerinde çalışıyorsa projenizi oluşturuyorsunuz.
Uygulamanız Google Compute Engine'de çalışıyorsa bir hizmet hesabı da oluşturulur siz de otomatik olarak oluşturacaksınız, ancak projenizin uygulamasının erişmesi gerekir. Daha fazla bkz. Hizmet hesaplarını kullanmak için örnek hazırlama.
Uygulamanız Google App Engine veya Google Compute Engine'de çalışmıyorsa Google API Consoleiçinde bu kimlik bilgilerini kullanabilirsiniz. Hizmet hesabı oluşturmak için kimlik bilgilerinizi veya daha önce oluşturduğunuz herkese açık kimlik bilgilerini görüntülemek için aşağıdakileri yapın:
tutucu2 l10n-yerÖncelikle bir hizmet hesabı oluşturun:
- Service accounts pageaçın.
- If prompted, select a project, or create a new one.
- Hizmet hesabı oluştur'u .
- Hizmet hesabı ayrıntıları altında, hizmet hesabı için bir ad, kimlik ve açıklama yazın, ardından Oluştur ve devam et seçeneğine tıklayın.
- İsteğe bağlı: Bu hizmet hesabına projeye erişim izni ver altında, hizmet hesabına verilecek IAM rollerini seçin.
- Devam'ı tıklayın.
- İsteğe bağlı: Kullanıcılara bu hizmet hesabına erişim izni ver altında, hizmet hesabını kullanmasına ve yönetmesine izin verilen kullanıcıları veya grupları ekleyin.
- Bitti'yi tıklayın.
Ardından, bir hizmet hesabı anahtarı oluşturun:
- Oluşturduğunuz hizmet hesabının e-posta adresine tıklayın.
- Anahtarlar sekmesini tıklayın.
- Anahtar ekle açılır listesinde Yeni anahtar oluştur öğesini seçin.
- Oluştur'u tıklayın.
Yeni genel/özel anahtar çiftiniz oluşturulur ve makinenize indirilir; özel anahtarın tek kopyası olarak hizmet eder. Güvenli bir şekilde saklamaktan siz sorumlusunuz. Bu anahtar çiftini kaybederseniz, yeni bir tane oluşturmanız gerekecektir.
İsterseniz API Console e-posta adresini dilediğiniz zaman görüntüleyebilirsiniz. anahtar parmak izlerini ve diğer bilgileri kullanmak veya ek ortak/özel anahtar çiftleri oluşturmak için kullanılabilir. Örneğin, hizmet hesabı kimlik bilgileri hakkında daha fazla bilgiyi API Console, bkz. API Consolekapsamındaki hizmet hesapları yardım dosyası olarak.
Hizmet hesabının e-posta adresini not edin ve hizmet hesabının özel anahtarını saklayın dosyayı uygulamanızın erişebildiği bir konuma yerleştirin. Uygulamanızda bu bilgilerin doğru şekilde yetkilendirilmiş API çağrıları.
Hizmet hesabına alan genelinde yetki verme
Kuruluşun Workspace yöneticisi Google Workspace hesabı kullanarak bir Google Workspace alanındaki kullanıcılar adına Workspace kullanıcı verilerine erişmek için kullanılan bir uygulamadır. Örneğin, bir uygulamadaki tüm kullanıcıların takvimlerine etkinlik eklemek için Bir Google Workspace alanının, Google Calendar API'ye erişmek için bir hizmet hesabı kullanması temsil eder. Bir hizmet hesabına bir alandaki kullanıcılar adına verilere erişmesi için yetki vermek, "alan genelinde yetki verme" olarak da bilinir. bir hizmet hesabına bağlayabilirsiniz.
Bir hizmet hesabına alan genelinde yetki vermek için Google Workspace alanında aşağıdaki adımların tamamlanması gerekir:
- Google Workspace alanınıza ait Yönetici konsolunda Ana menü'ye gidin Güvenlik > Erişim ve veri denetimi > API Denetimleri.
- Alan genelinde yetki bölmesinde Alan Genelinde Yetkiyi Yönet'i seçin.
- Yeni ekle'yi tıklayın.
- İstemci Kimliği alanına hizmet hesabının İstemci Kimliği'ni girin. Daha fazla hizmet hesabınızın istemci kimliğini Service accounts page
- OAuth kapsamları (virgülle ayrılmış) alanına, içe aktaracağınız kapsamların listesini girin. uygulaması için erişim izni verilmesi gerekir. Örneğin, uygulamanız için alan genelinde bir alan gerekiyorsa Google Drive API ve Google Calendar API'ye tam erişim sahibi olduğunuzdan emin olmak için şunları girin: https://www.googleapis.com/auth/drive, https://www.googleapis.com/auth/calendar.
- Yetkilendir'i tıklayın.
Uygulamanız artık Workspace alanınızda kullanıcı olarak API çağrıları yapma yetkisine sahiptir ( "başkasının kimliğini kullanmak" kullanıcılar). Yetki verilmiş bu API çağrılarını yapmaya hazırlanırken kullanıcının, başkasının kimliğini kullanabilir.
Yetki verilmiş bir API çağrısı yapmaya hazırlanma
Java
Müşteri e-posta adresini ve özel anahtarı
API Consoleiçin
Java için Google API'leri istemci kitaplığı
(hizmet hesabının kimlik bilgilerinden bir GoogleCredential
nesnesi oluşturmak ve
izin verilen kapsamları belirleyin. Örneğin:
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.services.sqladmin.SQLAdminScopes; // ... GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json")) .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN));
Google Cloud Platform'da uygulama geliştiriyorsanız uygulama varsayılan kimlik bilgileri bu da süreci basitleştirebilir.
Alan genelinde yetki ver
Hizmet hesabına alan genelinde erişim yetkisi verdiyseniz ve kimliğe bürünmek istiyorsanız
adresine sahip kullanıcı hesabının e-posta adresini
GoogleCredential
nesnesinin createDelegated
yöntemi. Örneğin,
örnek:
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json")) .createScoped(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) .createDelegated("workspace-user@example.com");
Yukarıdaki kod, createDelegated()
işlevini çağırmak için GoogleCredential
nesnesini kullanır
yöntemidir. createDelegated()
yönteminin bağımsız değişkeni
Workspace hesabı. İstekte bulunan kodunuz, Google'ı çağırmak için bu kimlik bilgisini kullanır
Hizmet hesabınızı kullanan API'ler.
Python
Müşteri e-posta adresini ve özel anahtarı API Consoleiçin Python için Google API'leri İstemci Kitaplığı aşağıdaki adımları tamamlayın:
- Hizmet hesabının kimlik bilgilerinden ve
Credentials
kapsamları belirler. Örnek:from google.oauth2 import service_account SCOPES = ['https://www.googleapis.com/auth/sqlservice.admin'] SERVICE_ACCOUNT_FILE = '/path/to/service.json' credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_FILE, scopes=SCOPES)
.Google Cloud Platform'da uygulama geliştiriyorsanız uygulama varsayılan kimlik bilgileri bu da süreci basitleştirebilir.
- Alan genelinde yetki ver
Hizmet hesabına alan genelinde erişim yetkisi verdiyseniz ve başka bir kullanıcı hesabının kimliğine bürünmek için mevcut bir kullanıcının
with_subject
yönteminiServiceAccountCredentials
nesne algılandı. Örneğin:delegated_credentials = credentials.with_subject('user@example.org')
Uygulamanızda Google API'lerini çağırmak için Kimlik Bilgileri nesnesini kullanın.
HTTP/REST
İstemci kimliğini ve özel anahtarı API Console, başvurunuzun aşağıdaki adımları tamamlaması gerekiyor: şu adımları uygulayın:
- Bir başlık, talep grubu ve veri içeren bir JSON Web Jetonu (JWT, ve imza.
- Google OAuth 2.0 Yetkilendirme Sunucusu'ndan bir erişim jetonu isteyin.
- Yetkilendirme Sunucusunun döndürdüğü JSON yanıtını işleme.
Aşağıdaki bölümlerde bu adımların nasıl tamamlanacağı açıklanmaktadır.
Yanıt bir erişim jetonu içeriyorsa erişim jetonunu şunlar için kullanabilirsiniz: bir Google API'si çağırın. (Yanıt bir erişim içermiyorsa JWT ve jeton isteğiniz düzgün biçimlendirilmemiş olabilir veya hizmet hesabı, istenen kapsamlara erişme izni yoktur.)
Erişim jetonunun süresi dolduğunda uygulamanız başka bir jeton JWT'yi imzalar, imzalar ve başka bir erişim jetonu ister.
![Sunucu uygulamanız, Google'dan jeton istemek için bir JWT kullanır
Ardından, jetonu kullanarak bir Google API uç noktası çağırır. Sıra No:
projeye dahil oluyor.](https://developers.google.cn/static/identity/protocols/oauth2/images/flows/jwt.png?authuser=5&hl=tr)
Bu bölümün geri kalanında, JWT oluşturma, JWT'yi imzalama, ve yanıtı işleme aldığınızdan emin olun.
JWT oluşturma
JWT üç bölümden oluşur: başlık, hak talebi grubu ve
imzası var. Başlık ve talep kümesi JSON nesneleridir. Bu JSON nesneleri,
UTF-8 baytları (daha sonra Base64url kodlaması kullanılarak kodlanır). Bu kodlama, korumanın
kodlama değişikliklerine karşı koruma sağlar. Başlık, hak talebi grubu ve
imza, nokta (.
) karakteriyle birleştirilir.
JWT aşağıdaki gibi oluşturulur:
{Base64url encoded header}.{Base64url encoded claim set}.{Base64url encoded signature}
İmzanın temel dizesi aşağıdaki gibidir:
{Base64url encoded header}.{Base64url encoded claim set}
JWT başlığını oluşturma
Başlık, imzalama algoritmasını gösteren üç alandan oluşur: onay ve [hizmet hesabının anahtar kimliği key](https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts.keys) kullanılan e-posta adresi. Algoritma ve biçim zorunludur ve her alanda yalnızca tek değer. Yeni algoritmalar ve biçimler kullanıma sunuldukça bu başlık değişir buna göre hazırlar. Anahtar kimliği isteğe bağlıdır. Yanlış bir Anahtar Kimliği belirtilirse GCP, jetonu doğrulamak ve aşağıdaki durumlarda jetonu reddetmek için hizmet hesabıyla ilişkili tüm anahtarlara geçerli anahtar bulunamadı. Google, yanlış anahtar kimliklerine sahip jetonları reddetme hakkını saklı tutar daha avantajlı bir konumda olursunuz.
Hizmet hesapları, RSA SHA-256 algoritmasını ve JWT jeton biçimini kullanır. Sonuç olarak, başlığın JSON gösterimi aşağıdaki gibidir:
{"alg":"RS256","typ":"JWT", "kid":"370ab79b4513eb9bad7c9bd16a95cb76b5b2a56a"}
Bunun Base64url gösterimi aşağıdaki gibidir:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsICJraWQiOiIzNzBhYjc5YjQ1MTNlYjliYWQ3YzliZDE2YTk1Y2I3NmI1YjJhNTZhIn0=
JWT hak talebi grubunu oluşturma
JWT hak talebi grubu, JWT hakkında şu bilgileri içerir: istenen (kapsamlar), jetonun hedefi, kartı veren kuruluş, jetonun oluşturulduğu saat, çok önemlidir. Alanların çoğu zorunludur. JWT başlığı gibi, JWT talebi kümesi bir JSON nesnesidir ve imzanın hesaplanmasında kullanılır.
Gerekli hak talepleri
JWT hak talebi grubundaki gerekli hak talepleri aşağıda gösterilmiştir. Bu makaleler, emin olmanız gerekir.
Ad | Açıklama |
---|---|
iss |
Hizmet hesabının e-posta adresi. |
scope |
Uygulamanın istediği izinlerin boşlukla ayrılmış listesi. |
aud |
Onaylamanın hedeflenen hedefinin tanımlayıcısı. Erişim jetonu oluştururken
bu değerin her zaman https://oauth2.googleapis.com/token olmasını isteyebilirsiniz. |
exp |
Onaylamanın geçerlilik bitiş zamanı (00:00:00 UTC itibarıyla saniye cinsinden belirtilir). 1 Ocak 1970. Bu değer, belirtilen zamandan en fazla 1 saat sonra olabilir. |
iat |
Onaylamanın yayınlandığı saat (00:00:00 UTC itibarıyla saniye olarak belirtilir). 1 Ocak 1970. |
JWT talebi kümesindeki gerekli alanların JSON gösterimi aşağıda gösterilmiştir:
{ "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com", "scope": "https://www.googleapis.com/auth/devstorage.read_only", "aud": "https://oauth2.googleapis.com/token", "exp": 1328554385, "iat": 1328550785 }
Ek hak talepleri
Bazı kurumsal durumlarda, bir uygulama kendi adına işlem yapmak için alan genelinde yetkiyi kullanabilir kuruluştaki belirli bir kullanıcı için geçerlidir. Bu tür kimliğe bürünme işlemini gerçekleştirme izni bir uygulamanın bir kullanıcının kimliğine bürünebilmesi için önce verilmelidir ve genellikle süper yönetici. Daha fazla bilgi için bkz. Alan genelinde yetkiyle API erişimini kontrol edin.
Bir uygulamaya bir kaynağa erişim yetkisi veren bir erişim jetonu almak için:
sub
alanı boş bırakılamaz.
Ad | Açıklama |
---|---|
sub |
Uygulamanın yetki isteğinde bulunduğu kullanıcının e-posta adresi erişim. |
Bir uygulamanın, bir kullanıcının kimliğine bürünme izni yoksa
sub
alanını içeren erişim jetonu isteği
hata.
sub
alanını içeren bir JWT hak talebi grubu örneği gösterilmiştir
aşağıda bulabilirsiniz:
{ "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com", "sub": "some.user@example.com", "scope": "https://www.googleapis.com/auth/prediction", "aud": "https://oauth2.googleapis.com/token", "exp": 1328554385, "iat": 1328550785 }
JWT talep grubunun kodlanması
JWT başlığında olduğu gibi, JWT hak talebi grubu da UTF-8 ve Base64url-safe olarak serileştirilmelidir. kodlanmıştır. Aşağıda, bir JWT Hak Talebi grubunun JSON gösterimi örneği verilmiştir:
{ "iss": "761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com", "scope": "https://www.googleapis.com/auth/prediction", "aud": "https://oauth2.googleapis.com/token", "exp": 1328554385, "iat": 1328550785 }
İmza hesaplanıyor
JSON Web İmzası (JWS), web sitesi için imzayı oluşturma mekanizmasına rehberlik eden JWT. İmza girişi, aşağıdaki içeriğin bayt dizisidir:
{Base64url encoded header}.{Base64url encoded claim set}
İmza hesaplanırken JWT başlığındaki imzalama algoritması kullanılmalıdır. İlgili içeriği oluşturmak için kullanılan
yalnızca Google OAuth 2.0 Yetkilendirme Sunucusu tarafından desteklenen imzalama algoritması, RSA'dır.
SHA-256 karma oluşturma algoritması. Bu, alg
içinde RS256
olarak ifade edilir
alanına girin.
Girişin UTF-8 temsilini, SHA256withRSA (diğer adıyla SHA-256 karma işleviyle RSASSA-PKCS1-V1_5-SIGN) ve Google API Console. Çıkış, bir bayt dizisi olur.
Bu durumda imza, Base64url olarak kodlanmış olmalıdır. Başlık, hak talebi grubu ve imza
nokta (.
) karakteriyle birleştiriliyor. Sonuç, JWT'dir. Google
aşağıdaki gibi olmalıdır (daha anlaşılır olması için satır sonları eklenmiştir):
{Base64url encoded header}. {Base64url encoded claim set}. {Base64url encoded signature}
Aşağıda, Base64url kodlamasından önceki bir JWT örneği bulunmaktadır:
{"alg":"RS256","typ":"JWT"}. { "iss":"761326798069-r5mljlln1rd4lrbhg75efgigp36m78j5@developer.gserviceaccount.com", "scope":"https://www.googleapis.com/auth/prediction", "aud":"https://oauth2.googleapis.com/token", "exp":1328554385, "iat":1328550785 }. [signature bytes]
Aşağıda, imzalanmış ve iletilmeye hazır bir JWT örneği verilmiştir:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL29hdXRoMi92NC90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.UFUt59SUM2_AW4cRU8Y0BYVQsNTo4n7AFsNrqOpYiICDu37vVt-tw38UKzjmUKtcRsLLjrR3gFW3dNDMx_pL9DVjgVHDdYirtrCekUHOYoa1CMR66nxep5q5cBQ4y4u2kIgSvChCTc9pmLLNoIem-ruCecAJYgI9Ks7pTnW1gkOKs0x3YpiLpzplVHAkkHztaXiJdtpBcY1OXyo6jTQCa3Lk2Q3va1dPkh_d--GU2M5flgd8xNBPYw4vxyt0mP59XZlHMpztZt0soSgObf7G3GXArreF_6tpbFsS3z2t5zkEiHuWJXpzcYr5zWTRPDEHsejeBSG8EgpLDce2380ROQ
Erişim jetonu isteğinde bulunma
İmzalanmış JWT'yi oluşturduktan sonra, uygulama bunu kullanarak erişim jetonu isteyebilir.
Bu erişim jetonu isteği bir HTTPS POST
isteğidir ve gövde URL'dir
kodlanmıştır. URL aşağıda gösterilmiştir:
https://oauth2.googleapis.com/token
HTTPS POST
isteğinde aşağıdaki parametreler gereklidir:
Ad | Açıklama |
---|---|
grant_type |
Gerektiği şekilde URL olarak kodlanmış aşağıdaki dizeyi kullanın:
urn:ietf:params:oauth:grant-type:jwt-bearer . |
assertion |
İmza dahil JWT. |
Aşağıda, erişim jetonunda kullanılan HTTPS POST
isteğinin ham dökümünü görebilirsiniz
istek:
POST /token HTTP/1.1 Host: oauth2.googleapis.com Content-Type: application/x-www-form-urlencoded grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU3MzM4MSwiaWF0IjoxMzI4NTY5NzgxfQ.ixOUGehweEVX_UKXv5BbbwVEdcz6AYS-6uQV6fGorGKrHf3LIJnyREw9evE-gs2bmMaQI5_UbabvI4k-mQE4kBqtmSpTzxYBL1TCd7Kv5nTZoUC1CmwmWCFqT9RE6D7XSgPUh_jF1qskLa2w0rxMSjwruNKbysgRNctZPln7cqQ
Aşağıda, curl
kullanılarak aynı istek gösterilmektedir:
curl -d 'grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU3MzM4MSwiaWF0IjoxMzI4NTY5NzgxfQ.RZVpzWygMLuL-n3GwjW1_yhQhrqDacyvaXkuf8HcJl8EtXYjGjMaW5oiM5cgAaIorrqgYlp4DPF_GuncFqg9uDZrx7pMmCZ_yHfxhSCXru3gbXrZvAIicNQZMFxrEEn4REVuq7DjkTMyCMGCY1dpMa8aWfTQFt3Eh7smLchaZsU ' https://oauth2.googleapis.com/token
Yanıtı işleme
JWT ve erişim jetonu isteği düzgün şekilde oluşturulmuşsa ve hizmet hesabında işlemi gerçekleştirme izninin olması, ardından Yetkilendirme Sunucusu'nun JSON yanıtının bir erişim jetonu içerir. Aşağıda örnek bir yanıt verilmiştir:
{ "access_token": "1/8xbJqaOZXSUZbHLl5EOtu1pxz3fmmetKx9W8CV4t79M", "scope": "https://www.googleapis.com/auth/prediction" "token_type": "Bearer", "expires_in": 3600 }
Erişim jetonları
expires_in
değer.
Google API'lerini çağırma
Java
Şu adımları uygulayarak Google API'lerini çağırmak için GoogleCredential
nesnesini kullanın:
şu adımları uygulayın:
-
GoogleCredential
nesne algılandı. Örneğin:SQLAdmin sqladmin = new SQLAdmin.Builder(httpTransport, JSON_FACTORY, credential).build();
- API hizmetine istekte bulunmak için
hizmet nesnesi tarafından sağlanan arayüz.
Örneğin, heyecan verici-example-123 dizininde Cloud SQL veritabanlarının
proje:
SQLAdmin.Instances.List instances = sqladmin.instances().list("exciting-example-123").execute();
.
Python
Aşağıdaki adımları uygulayarak Google API'lerini çağırmak için yetkilendirilmiş Credentials
nesnesini kullanın:
şu adımları uygulayın:
- Çağırmak istediğiniz API için bir hizmet nesnesi oluşturun. Bir hizmet nesnesi derlersiniz
API'nin ve API'nin adı ve sürümüyle birlikte
build
işlevini çağırarakCredentials
nesne yetkilendirildi. Örneğin, Cloud SQL Yönetimi API'si:import googleapiclient.discovery sqladmin = googleapiclient.discovery.build('sqladmin', 'v1beta3', credentials=credentials)
. - API hizmetine istekte bulunmak için
hizmet nesnesi tarafından sağlanan arayüz.
Örneğin, heyecan verici-example-123 dizininde Cloud SQL veritabanlarının
proje:
response = sqladmin.instances().list(project='exciting-example-123').execute()
.
HTTP/REST
Uygulamanız bir erişim jetonu aldıktan sonra, bu jetonu kullanarak bir Google
Belirli bir hizmet hesabı adına API veya
kullanıcı hesabı(API'nin gerektirdiği erişim kapsamları verildiyse) ile birlikte çalışır. Bunu yapmak için
API'ye yapılan bir istekte, access_token
sorgusu ekleyerek erişim jetonunu
parametresi veya Authorization
HTTP başlığı Bearer
değeri olabilir. Mümkünse
HTTP üstbilgisi tercih edilir, çünkü sorgu dizeleri sunucu günlüklerinde görünür olma eğilimindedir. Çoğu zaman
Google API'lerine yapılan çağrılarınızı ayarlamak için bir istemci kitaplığı kullanabilirsiniz (örneğin,
Drive Files API'yi çağırma).
Tüm Google API'lerini deneyebilir ve kapsamlarını şuradan görüntüleyebilirsiniz: OAuth 2.0 Playground (OAuth 2.0 Oyun Alanı).
HTTP GET örnekleri
Bir
drive.files
Authorization: Bearer
HTTP kullanan uç nokta (Drive Files API)
başlık aşağıdaki gibi görünebilir. Kendi erişim jetonunuzu belirtmeniz gerektiğini unutmayın:
GET /drive/v2/files HTTP/1.1 Host: www.googleapis.com Authorization: Bearer access_token
Aşağıda, kimliği doğrulanmış kullanıcı için aynı API'ye access_token
kullanılarak yapılan bir çağrı verilmiştir.
sorgu dizesi parametresi:
GET https://www.googleapis.com/drive/v2/files?access_token=access_token
curl
örnek
Bu komutları curl
komut satırı uygulamasıyla test edebilirsiniz. Bir
HTTP üstbilgisi seçeneğini kullanan bir örnek (tercih edilen):
curl -H "Authorization: Bearer access_token" https://www.googleapis.com/drive/v2/files
Alternatif olarak, sorgu dizesi parametre seçeneği şu şekildedir:
curl https://www.googleapis.com/drive/v2/files?access_token=access_token
Erişim jetonlarının süresinin dolacağı zaman
Google OAuth 2.0 Yetkilendirme Sunucusu tarafından verilen erişim jetonlarının geçerlilik süresi şu tarihten sonra dolar:
expires_in
değeri tarafından sağlanır. Bir erişim jetonunun süresi dolduğunda
başka bir JWT oluşturması, imzalaması ve başka bir erişim jetonu istemesi gerekir.
JWT hata kodları
error alanı |
error_description alanı |
Anlamı | Çözüm |
---|---|---|---|
unauthorized_client |
Unauthorized client or scope in request. |
Alan genelinde yetki kullanmaya çalışıyorsanız hizmet hesabı Kullanıcı alanının Yönetici konsolu. |
Hizmet hesabının
Kullanıcıya ait Yönetici Konsolu'nun alan genelinde yetki sayfasını,
Yetkilendirmenin tamamlanması genellikle birkaç dakika sürse de 24 saati bulabilir. Google Hesabınızdaki tüm kullanıcılara uygulanır. |
unauthorized_client |
Client is unauthorized to retrieve access tokens using this method, or client not
authorized for any of the scopes requested. |
Bir hizmet hesabı, istemci kimliği yerine istemci e-posta adresi kullanılarak yetkilendirildi (sayısal) olarak ayarlayın. | Yönetici Konsolu'nda, alan genelinde yetki sayfasına giderek istemciyi kaldırıp yeniden ekleyin yerine sayısal kimlik kullanın. |
access_denied |
(herhangi bir değer) | Alan genelinde yetki kullanıyorsanız istenen kapsamlardan bir veya daha fazlası yetkilendirilmemiş Yönetici konsolu'nda oturum açın. |
Hizmet hesabının
Kullanıcıya ait Yönetici Konsolu'nun alan genelinde yetki sayfasını,
Yetkilendirmenin tamamlanması genellikle birkaç dakika sürse de 24 saati bulabilir. Google Hesabınızdaki tüm kullanıcılara uygulanır. |
admin_policy_enforced |
(herhangi bir değer) | Google Hesabı, politikalarına uymak zorundadır. |
Google Workspace Yöneticisi yardım makalesine göz atın Hangi üçüncü taraf ve nasıl yararlanabileceğiniz hakkında daha fazla bilgi için yönetici, şu zamana kadar tüm kapsamlara veya hassas ve kısıtlanmış kapsamlara erişimi kısıtlayabilir. OAuth istemci kimliğinize açıkça erişim verildi. |
invalid_client |
(herhangi bir değer) |
OAuth istemcisi veya JWT jetonu geçersiz ya da yanlış yapılandırılmış. Ayrıntılar için hata açıklamasına bakın. |
JWT jetonunun geçerli olduğundan ve doğru talepleri içerdiğinden emin olun. OAuth istemcisi ve hizmet hesabının doğru olduğundan emin olun: doğru e-posta adresini kullandığınızdan emin olun. JWT jetonunun doğru olduğundan ve isteğinde bulunabilirsiniz. |
invalid_grant |
Not a valid email. |
Kullanıcı mevcut değil. | sub hak talebi alanındaki (alandaki) e-posta adresinin doğru olup olmadığını kontrol edin. |
invalid_grant |
|
Bu, genellikle yerel sistem saatinin doğru olmadığı anlamına gelir. Ayrıca yalnızca
exp değeri, gelecekte iat değeri için 65 dakikadan uzun bir süre sonra
veya exp değeri iat değerinden küçük. |
JWT'nin oluşturulduğu sistemdeki saatin doğru olduğundan emin olun. Eğer zamanınızı proje yönetimiyle ilgili Google NTP. |
invalid_grant |
Invalid JWT Signature. |
JWT onayı, hizmet hesabıyla ilişkili olmayan bir özel anahtarla imzalanmış kullanılan anahtarın silinmiş, devre dışı bırakılmış veya süresi doldu. Alternatif olarak, JWT onayı yanlış kodlanmış olabilir ve Base64 olarak kodlanmış, yeni satırlar veya dolgu eşit işaretleri olmadan. |
JWT hak talebi grubunun kodunu çözün ve onayı imzalayan anahtarın ilişkilendirildiğini doğrulayın oturum açın. JWT'nin doğru şekilde oluşturulduğundan emin olmak için Google tarafından sağlanan OAuth kitaplığını kullanmayı deneyin. |
invalid_scope |
Invalid OAuth scope or ID token audience provided. |
Hiçbir kapsam istenmedi (kapsamların boş listesi) veya istenen kapsamlardan biri istenmedi (yani geçersizdir). |
JWT'ye ait
|
disabled_client |
The OAuth client was disabled. |
JWT onayını imzalamak için kullanılan anahtar devre dışı. |
Google API Consolebölümüne gidin ve IAM ve Yönetici Konsolu > Hizmet Hesapları'nı seçerseniz "Anahtar Kimliği"ni içeren hizmet hesabını etkinleştirin. ikinci el ifadesini kullanın. |
org_internal |
This client is restricted to users within its organization. |
İstekteki OAuth istemci kimliği, Google'a erişimi sınırlayan bir projenin parçası Belirli bir Google Cloud Kuruluşu. |
Kimlik doğrulaması için kuruluşa ait bir hizmet hesabı kullanın. Şunu onaylayın: kullanıcı türü yapılandırma kullanıyorsanız daha fazla bilgi edinin. |
Ek: OAuth olmadan hizmet hesabı yetkilendirme
Bazı Google API'leriyle, imzalı bir JWT kullanarak doğrudan OAuth 2.0 erişim jetonu yerine hamiline ait jetondur. Bu mümkün olduğunda, projenizi API çağrısı yapmadan önce Google'ın yetkilendirme sunucusuna bir ağ isteği gönderin.
Çağırmak istediğiniz API'nin Google API'leri GitHub deposu, erişim jetonu yerine JWT kullanarak yetkili API çağrıları yapabilirsiniz. Bunu yapmak için:
- Yukarıda açıklandığı şekilde bir hizmet hesabı oluşturun. Şunları yaptığınızdan emin olun: hesabı oluşturduğunuzda aldığınız JSON dosyasını saklayın.
- Şu adreste bulunan gibi standart bir JWT kitaplığını kullanmak:
jwt.io, başlık içeren bir JWT oluşturun
ve yük aşağıdaki örnekteki gibidir:
{ "alg": "RS256", "typ": "JWT", "kid": "abcdef1234567890" } . { "iss": "123456-compute@developer.gserviceaccount.com", "sub": "123456-compute@developer.gserviceaccount.com", "aud": "https://firestore.googleapis.com/", "iat": 1511900000, "exp": 1511903600 }
- Başlıktaki
kid
alanı için hizmet hesabınızın özel anahtarını belirtin Kimlik. Bu değeri, hizmet hesabınızınprivate_key_id
alanında bulabilirsiniz. JSON dosyası. iss
vesub
alanları için hizmet hesabınızın e-posta adresini belirtin girin. Bu değeri, hizmetinizinclient_email
alanında bulabilirsiniz. account JSON dosyası.aud
alanı için API uç noktasını belirtin. Örnek:https://SERVICE.googleapis.com/
iat
alanı için geçerli Unix saatini belirtin veexp
alanında, JWT'nin zamanla tam olarak 3.600 saniye sonra sona erecektir.
Hizmet hesabı JSON dosyanızda bulunan özel anahtarı kullanarak JWT'yi RSA-256 ile imzalayın.
Örneğin:
Java
Kullanım google-api-java-client ve java-jwt:
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("MyProject-1234.json")); PrivateKey privateKey = credential.getServiceAccountPrivateKey(); String privateKeyId = credential.getServiceAccountPrivateKeyId(); long now = System.currentTimeMillis(); try { Algorithm algorithm = Algorithm.RSA256(null, privateKey); String signedJwt = JWT.create() .withKeyId(privateKeyId) .withIssuer("123456-compute@developer.gserviceaccount.com") .withSubject("123456-compute@developer.gserviceaccount.com") .withAudience("https://firestore.googleapis.com/") .withIssuedAt(new Date(now)) .withExpiresAt(new Date(now + 3600 * 1000L)) .sign(algorithm); } catch ...
Python
PyJWT'yi kullanarak:
iat = time.time() exp = iat + 3600 payload = {'iss': '123456-compute@developer.gserviceaccount.com', 'sub': '123456-compute@developer.gserviceaccount.com', 'aud': 'https://firestore.googleapis.com/', 'iat': iat, 'exp': exp} additional_headers = {'kid': PRIVATE_KEY_ID_FROM_JSON} signed_jwt = jwt.encode(payload, PRIVATE_KEY_FROM_JSON, headers=additional_headers, algorithm='RS256')
- Hamiline ait jeton olarak imzalı JWT'yi kullanarak API'yi çağırın:
GET /v1/projects/abc/databases/123/indexes HTTP/1.1 Authorization: Bearer SIGNED_JWT Host: firestore.googleapis.com
.
Hesaplar Arası Korumayı Uygulama
Kullanıcılarınızın güvenliğini korumak için atmanız gereken ek bir adım Hesaplar Arası Google'ın Hesaplar Arası Koruma Hizmeti'ni kullanarak koruma. Bu hizmet sayesinde şunları yapabilirsiniz: uygulamanıza aşağıdaki konularda bilgi sağlayan güvenlik işlemi bildirimlerine abone olun: kullanıcı hesabında önemli değişiklikler yapabilir. Daha sonra bu bilgileri kullanarak karar verdiğinizden emin olun.
Google'ın Hesaplar Arası Koruma Hizmeti tarafından uygulamanıza gönderilen etkinlik türlerine örnek olarak aşağıdakiler verilebilir:
-
https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
-
https://schemas.openid.net/secevent/oauth/event-type/token-revoked
-
https://schemas.openid.net/secevent/risc/event-type/account-disabled
Bkz. Kullanıcı hesaplarını Hesaplar Arası Koruma ile koruma 'nı inceleyin. inceleyin.