שימוש בחשבונות שירות עם זהויות חיצוניות

במאמר הזה מוסבר איך לבצע אימות באמצעות חשבונות שירות כשמשתמשים ב-Identity-Aware Proxy ‏ (IAP) עם זהויות חיצוניות.

איך מקבלים את מזהה הלקוח ואת הסוד

  1. נכנסים לדף IAP במסוף Google Cloud .

    מעבר לדף IAP

  2. לוחצים על הכרטיסייה אפליקציות.

  3. מוצאים את האפליקציה שרוצים להגדיר לשימוש בחשבונות שירות.

  4. בתפריט האפשרויות הנוספות, בוחרים באפשרות Go to OAuth configuration (מעבר להגדרת OAuth).

מוצג דף עם מזהה הלקוח והסוד של האפליקציה. תצטרכו את הפרטים האלה כדי להגדיר את Identity Platform בקטע הבא.

הגדרת Google כספק זהויות

אם בפרויקט שלכם ב-Identity Platform עדיין לא נעשה שימוש ב-Google לאימות, יוצרים הגדרה חדשה באמצעות מזהה הלקוח והסוד שלכם:

  1. נכנסים לדף Identity Platform Providers במסוףGoogle Cloud .
    עוברים לדף Identity Providers

  2. אם אתם משתמשים ב-Identity Platform multi-tenancy, בוחרים את הדייר שמשויך למשאב IAP.

  3. לוחצים על הוספת ספק.

  4. בוחרים באפשרות Google מתוך רשימת הספקים.

  5. בקטע Web SDK configuration, מזינים את מספר הלקוח והסוד שקיבלתם בקטע הקודם.

  6. לוחצים על Save.

אם אתם כבר משתמשים באימות של Google, אתם יכולים להשתמש במזהה הלקוח במקום זאת. השינוי הזה לא ישפיע על המשתמשים הקיימים.

  1. נכנסים לדף Identity Platform Providers במסוףGoogle Cloud .
    עוברים לדף Identity Providers

  2. אם אתם משתמשים ב-Identity Platform multi-tenancy, בוחרים את הדייר שמשויך למשאב IAP.

  3. ברשימת הספקים, מאתרים את Google ולוחצים על עריכה.

  4. בקטע מזהי לקוחות מורשים, לוחצים על הוספה.

  5. מזינים את מזהה הלקוח שקיבלתם בקטע הקודם.

  6. לוחצים על Save.

החלפת אסימון Google באסימון Identity Platform

כשמבצעים אימות בפעם הראשונה באמצעות Google, ‏ Identity Platform מחזיר אסימון מזהה של Google. אחר כך אפשר להחליף אותו באסימון של Identity Platform על ידי קריאה ל-signInWithIdp:

Node.js

import * as firebase from 'firebase/app';
import 'firebase/auth';

const config = {
  apiKey: '...',
};
firebase.initializeApp(config);
const cred = firebase.auth.GoogleAuthProvider.credential(google_oidc_id_token);
firebase.auth().signInWithCredential(cred)
  .then((userCredential) => {
    return userCredential.user.getIdToken();
  })
  .then((gcipIdToken) => {
    // This token can now be used to access the resource.
  })
  .catch((error) => {
    // Error occurred.
  });

Python

SIGN_IN_WITH_IDP_API = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp'

def exchange_google_id_token_for_gcip_id_token(api_key, tenant_id, google_open_id_connect_token):
  url = SIGN_IN_WITH_IDP_API + '?key=' + api_key
  data={'requestUri': 'http://localhost',
        'returnSecureToken': True,
        'postBody':'id_token=' + google_open_id_connect_token + '&providerId=google.com',
        'tenantId': tenant_id}
  resp = requests.post(url, data)
  res = resp.json()
  return res['idToken']

REST

בקשה:

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=API-KEY

תוכן:

{
"postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com"
"requestUri": "http://localhost",
"returnIdpCredential": true,
"returnSecureToken": true,
"tenantId": "TENANT-ID"
}

כדי לגשת למשאבים באמצעות IAP, צריך לכלול את אסימון המזהה של Identity Platform בכותרת ההרשאה:

curl -H "Authorization: Bearer GCIP-ID-TOKEN" "https://example.appspot.com/api"

חשוב לזכור שזהויות חיצוניות לא תומכות ב-IAM, ולכן תצטרכו לעדכן ידנית את בקרת הגישה של האפליקציה כדי להעניק גישה לחשבון השירות. מידע נוסף זמין במאמר בנושא JWTs for external identities.