Google Cloud hizmetlerine bağlanma

Etkili kullanıcı için ScriptApp.getIdentityToken() yöntemini kullanarak bir OpenID Connect kimlik jetonu (bir JSON Web Token veya JWT) alabilirsiniz. Bu jetonu, Cloud Run gibi kabul edecek şekilde yapılandırılmış Google Cloud hizmetleriyle kimlik doğrulaması yapmak için kullanabilirsiniz.

openid kapsamını etkinleştirin

OpenID Connect kimlik jetonu oluşturmak için openid kapsamı gereklidir. Ayrıca, komut dosyanızın kullandığı diğer kapsamları da listelemeniz gerekir. Örneğin, UrlFetch hizmeti için https://www.googleapis.com/auth/script.external_request. Kullanıcının e-posta adresini kimlik jetonuna eklemek için bu örnekte https://www.googleapis.com/auth/userinfo.email kapsamı yer alır.

Komut dosyası projenizin manifest dosyasına (appsscript.json), openid kapsamını ve gerekli diğer kapsamları oauthScopes dizisine ekleyin:

{
  "timeZone": "America/New_York",
  "dependencies": {
  },
  "exceptionLogging": "STACKDRIVER",
  "runtimeVersion": "V8",
  "oauthScopes": [
    "openid",
    "https://www.googleapis.com/auth/script.external_request",
    "https://www.googleapis.com/auth/userinfo.email"
  ]
}

Google Cloud hizmetini yapılandırma

Google Cloud hizmetini, komut dosyanıza verilen kimlik jetonunu kabul edecek şekilde yapılandırmanız gerekir. Bu işlem genellikle komut dosyasının istemci kimliğinin izin verilen kitle olarak eklenmesini içerir.

Komut dosyanızın istemci kimliğini bulmak için bir kimlik jetonunun kodunu çözebilirsiniz:

function logClientId() {
  const idToken = ScriptApp.getIdentityToken();
  const body = idToken.split('.')[1];
  const decoded = Utilities.newBlob(Utilities.base64Decode(body)).getDataAsString();
  const payload = JSON.parse(decoded);
  Logger.log('Client ID: ' + payload.aud);
}

Cloud Run için bu istemci kimliğine izin vermek üzere özel kitleleri yapılandırabilirsiniz.

Kimliği doğrulanmış bir istekte bulunma

Yapılandırıldıktan sonra kimlik jetonunu isteklerinizin Authorization başlığına ekleyebilirsiniz:

function callCloudRunService() {
  const idToken = ScriptApp.getIdentityToken();
  const url = 'https://your-service-url.a.run.app';

  const response = UrlFetchApp.fetch(url, {
    headers: {
      'Authorization': 'Bearer ' + idToken
    }
  });

  Logger.log(response.getContentText());
}