ניהול אפליקציית OAuth

במדריך הזה מוסבר איך לנהל שילובים של אפליקציות מבוססי-OAuth עםGoogle Cloud.

כדי לשלב אפליקציה מבוססת-OAuth, מבצעים את הפעולות הבאות:

  1. יצירת לקוח OAuth.
  2. יצירת פרטי כניסה של לקוח OAuth.
  3. בפרטי הכניסה של לקוח ה-OAuth, מקבלים את סוד הלקוח. במאמר סיכוני אבטחה ופתרונות אפשריים שקשורים ללקוח OAuth ולפרטי הכניסה מוסבר על הסיכונים שקשורים לאחסון של סוד הלקוח ולגישה אליו, ועל אסטרטגיות שיכולות לעזור לצמצם את הסיכונים האלה.

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

לפני שמתחילים

  1. צריך להגדיר ארגון ב- Google Cloud .

  2. התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

    gcloud init

    אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.

  3. צריך להגדיר מאגר זהויות של כוח עבודה וספק בארגון שבו תרשמו את אפליקציית OAuth. במאמרים הבאים מוסבר איך להגדיר איחוד שירותי אימות הזהויות של כוח העבודה עבור Microsoft Entra ID,‏ Okta וספקי OIDC ו-SAML 2.0 אחרים.

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לרישום אפליקציית OAuth בארגון, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין של לקוח OAuth ב-IAM (roles/iam.oauthClientAdmin) בפרויקט. להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ניהול לקוחות OAuth

בקטע הזה מוסבר איך לנהל לקוחות OAuth.

יצירת לקוח OAuth

כדי ליצור לקוח OAuth:

gcloud

gcloud iam oauth-clients create APP_OAUTH_CLIENT_ID \
    --project=PROJECT_ID \
    --location=global \
    --client-type="CONFIDENTIAL_CLIENT" \
    --display-name="My OAuth application" \
    --description="An application registration for MyApp" \
    --allowed-scopes="https://www.googleapis.com/auth/cloud-platform" \
    --allowed-redirect-uris="REDIRECT_URI" \
    --allowed-grant-types="authorization_code_grant"

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_ID: מזהה לקוח שמייצג את לקוח ה-OAuth הזה.
  • PROJECT_ID: מזהה הפרויקט שבו יצרתם את מאגר הזהויות של כוח העבודה ואת הספק. הפרויקט צריך להיווצר בארגון שבו נוצרו מאגר כוח העבודה והספק.
  • REDIRECT_URI: ה-URI להפניה אוטומטית של אפליקציית OAuth, לדוגמה https://myapp.com/signin-callback.

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  -d "{ \
        'allowedGrantTypes': ['AUTHORIZATION_CODE_GRANT'], \
        'allowedRedirectUris': ['REDIRECT_URI'], \
        'allowedScopes': ['https://www.googleapis.com/auth/cloud-platform'], \
        'clientType': 'CONFIDENTIAL_CLIENT', \
        'description': 'My OAuth client description', \
        'disabled': false, \
        'displayName': 'My OAuth client'}" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients\?oauthClientId\=APP_OAUTH_CLIENT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו יצרתם את מאגר הזהויות של כוח העבודה ואת הספק. הפרויקט צריך להיווצר בארגון שבו נוצרו מאגר כוח העבודה והספק.
  • REDIRECT_URI: ה-URI להפניה אוטומטית של אפליקציית OAuth, לדוגמה https://myapp.com/signin-callback.
  • APP_OAUTH_CLIENT_ID: מזהה לקוח שמייצג את לקוח ה-OAuth הזה.

אחרי שרושמים את האפליקציה, יוצרים את פרטי הכניסה של לקוח OAuth ומקבלים את הסוד שמשמש את אפליקציית OAuth לגישה אלGoogle Cloud.

הצגת רשימה של לקוחות OAuth

כדי להציג רשימה של לקוחות OAuth רשומים, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients list \
    --project=PROJECT_ID \
    --location=global

REST

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients

מחליפים את PROJECT_ID במזהה הפרויקט שבו רשומים אפליקציות OAuth.

מתן תיאור של לקוח OAuth

כדי לתאר לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients describe APP_OAUTH_CLIENT_ID \
    --project PROJECT_ID \
    --location global

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_ID: המזהה של לקוח OAuth שרוצים לתאר
  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth

REST

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: המזהה של לקוח OAuth שרוצים לתאר

עדכון לקוח OAuth

כדי לעדכן לקוח OAuth, מריצים את הפקודה הבאה.

gcloud

gcloud iam oauth-clients update APP_OAUTH_CLIENT_ID \
    --project=PROJECT_ID \
    --location=global \
    --allowed-redirect-uris="REDIRECT_URI"

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_ID: מזהה הלקוח של OAuth עבור לקוח OAuth שרוצים לעדכן
  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • REDIRECT_URI: ה-URI של ההפניה לכתובת אחרת באפליקציית OAuth

כדי לעדכן שדות אחרים, משתמשים בדגלים שמפורטים ב-gcloud iam oauth-clients update.

REST

curl -d'{"allowedRedirectUris":"REDIRECT_URI"}' \
  -H "Content-Type: application/json" -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID?update_mask=allowed_redirect_uris

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח של OAuth עבור לקוח OAuth שרוצים לעדכן
  • REDIRECT_URI: ה-URI של ההפניה לכתובת אחרת עבור לקוח OAuth

כדי לעדכן שדות אחרים, מגדירים את update_mask לשמות השדות שמפורטים בgcloud iam oauth-clients update.

מחיקת לקוח OAuth

כדי למחוק לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients delete APP_OAUTH_CLIENT_ID \
    --project PROJECT_ID \
    --location global

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth שרוצים למחוק
  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth

REST

curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth שרוצים למחוק

ניהול פרטי כניסה של לקוח OAuth

בקטע הזה מוסבר איך לנהל את פרטי הכניסה של לקוח OAuth עבור לקוח OAuth.

יצירת פרטי כניסה של לקוח OAuth

כדי ליצור פרטי כניסה של לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients credentials create APP_OAUTH_CLIENT_CREDENTIAL_ID \
    --oauth-client=APP_OAUTH_CLIENT_ID \
    --display-name='My OAuth client credential' \
    --location='global'

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_CREDENTIAL_ID: מזהה שמייצג את פרטי הכניסה של הלקוח
  • APP_OAUTH_CLIENT_ID: מזהה לקוח OAuth שאפשר לקבל על ידי תיאור של אפליקציית לקוח OAuth רשומה

REST

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  -d "{'disabled': false, 'displayName': 'My OAuth client credential'}" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials\?oauthClientCredentialId=APP_OAUTH_CLIENT_CREDENTIAL_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה לקוח OAuth שאפשר לקבל על ידי תיאור של אפליקציית לקוח OAuth רשומה
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: מזהה שמייצג את פרטי הכניסה של הלקוח

הצגת רשימה של פרטי כניסה של לקוח OAuth

כדי להציג רשימה של פרטי כניסה של לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients credentials list \
    --oauth-client=APP_OAUTH_CLIENT_ID \
    --project=PROJECT_ID \
    --location=global

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_ID: מזהה לקוח OAuth שעבורו רוצים להציג את פרטי הכניסה
  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth

REST

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/$PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה לקוח OAuth שעבורו רוצים להציג את פרטי הכניסה

תיאור של פרטי כניסה של לקוח OAuth

כדי לתאר פרטי כניסה של לקוח OAuth, מריצים את הפקודה הבאה. אפשר לקבל את סוד הלקוח על ידי בדיקת הפלט.

gcloud

gcloud iam oauth-clients credentials describe APP_OAUTH_CLIENT_CREDENTIAL_ID \
    --oauth-client=APP_OAUTH_CLIENT_ID \
    --location='global'

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_CREDENTIAL_ID: ה-URI של ההפניה לכתובת אחרת עבור לקוח OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth שאפשר לתאר את רישום אפליקציית הלקוח כדי לקבל אותו

REST

curl \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: ה-URI של ההפניה לכתובת אחרת עבור לקוח OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth שאפשר לתאר את רישום אפליקציית הלקוח כדי לקבל אותו

בפלט, clientSecret הוא סוד הלקוח. זהו הסוד שבו משתמשת אפליקציית OAuth כדי לגשת אל Google Cloud.

עדכון פרטי כניסה של לקוח OAuth

כדי לעדכן פרטי כניסה של לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients credentials update APP_OAUTH_CLIENT_CREDENTIAL_ID \
    --client-id=APP_OAUTH_CLIENT_ID \
    --display-name="My new credential name" \
    --location=global

REST

curl -d'{"displayName":"My new credential name"}' -X PATCH \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID?update_mask=display_name

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: ה-URI של ההפניה לכתובת אחרת עבור לקוח OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח של OAuth שאפשר לקבל על ידי תיאור של רישום אפליקציית הלקוח

השבתה של פרטי כניסה של לקוח OAuth

כדי למחוק פרטי כניסה של לקוח OAuth, צריך להשבית אותם קודם. כדי להשבית את פרטי הכניסה של לקוח ה-OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients credentials update APP_OAUTH_CLIENT_CREDENTIAL_ID \
    --oauth-client=APP_OAUTH_CLIENT_ID \
    --disabled \
    --project=PROJECT_ID \
    --location=global

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: המזהה של פרטי הכניסה של הלקוח שרוצים להשבית

REST

curl -d'{"disabled":"true"}' \
  -H "Content-Type: application/json" -X PATCH \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID?update_mask=disabled

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: מזהה הלקוח ב-OAuth
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: המזהה של פרטי הכניסה של הלקוח שרוצים להשבית

מחיקת פרטי כניסה של לקוח OAuth

כדי למחוק פרטי כניסה של לקוח OAuth, מריצים את הפקודה הבאה:

gcloud

gcloud iam oauth-clients credentials delete APP_OAUTH_CLIENT_CREDENTIAL_ID \
    --project=PROJECT_ID \
    --oauth-client=APP_OAUTH_CLIENT_ID \
    --location=global

מחליפים את מה שכתוב בשדות הבאים:

  • APP_OAUTH_CLIENT_CREDENTIAL_ID: מזהה הלקוח ב-OAuth
  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: המזהה של פרטי הכניסה של הלקוח

REST

curl -X DELETE \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -H "X-Goog-User-Project: PROJECT_ID" \
  https://iam.googleapis.com/v1/projects/PROJECT_ID/locations/global/oauthClients/APP_OAUTH_CLIENT_ID/credentials/APP_OAUTH_CLIENT_CREDENTIAL_ID

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: מזהה הפרויקט שבו רשמתם את אפליקציית ה-OAuth
  • APP_OAUTH_CLIENT_ID: המזהה של פרטי הכניסה של הלקוח
  • APP_OAUTH_CLIENT_CREDENTIAL_ID: מזהה הלקוח ב-OAuth

המאמרים הבאים