簡體   English   中英

服務帳戶是否必須模擬用戶才能訪問目錄 Api?

[英]Does a Service Account have to impersonate a user to access the Directory Api?

我想我可能誤解了服務帳戶在 GCP 中的工作方式,因為我不明白為什么(在我的情況下)他們需要模擬用戶來完成任務。

我需要在我的應用程序上訪問 Workspace Admin SDK API 中的一些信息(例如列出 chromeos devices )而不提示用戶登錄。我認為最好的方法是使用服務帳戶來執行此操作,所以我可以將我的服務帳戶的詳細信息上傳到我的應用程序,並且每次我需要一些數據時,它都會通過這個帳戶進行。

我在 GCP 中創建了我的服務帳戶,然后在 Google Workspace 中為其提供了具有所需范圍的域范圍委派。

起初在測試時我收到了 Forbidden 403 錯誤,因為我沒有冒充任何用戶。 一旦我開始模擬用戶,我就能夠從 API 獲得所需的數據。 我還確認,當我刪除域范圍委派的一些范圍時,我不再能夠檢索該數據。 這意味着當我冒充超級管理員時,我只能獲取我提供的服務帳戶范圍的數據。

這讓我想到了一個問題,為什么我首先需要冒充任何人?

這只是目錄 API 的問題嗎? 在他們的文檔中,它指出

Note: Only users with access to the Admin APIs can access the Admin SDK Directory API, therefore your service account needs to impersonate one of those users to access the Admin SDK Directory API. 此外,用戶必須至少登錄一次並接受 Google Workspace 服務條款。

所以我的問題是:我是否能夠以服務帳戶的形式調用目錄 API 而無需模擬用戶? 如果沒有,是否可以在不模擬用戶的情況下將任何 API 調用作為服務帳戶進行,或者這只是目錄 API 問題?

與此問題相關:

為什么我首先需要冒充任何人?

服務帳戶允許您進行身份驗證並被授權訪問 Google API 中的數據,如此所述,通過執行域范圍委派,您授予服務帳戶訪問權限以通過模擬您的域中的用戶來訪問您的帳戶數據。 您可以將服務帳戶視為自動化授權的一種方式,因為它可以對多個 API 執行更改,而不僅僅是管理員 SDK 並避免讓用戶冒充每次都提供對給定 API 的訪問權限。

您可以在不冒充用戶的情況下調用 API,但這會導致訪問服務帳戶可用的數據,因為它是屬於他們自己的數據,這意味着例如,如果您進行 Drive API 調用以使用服務帳戶而不模擬它,可以創建文件,但它只屬於服務帳戶,您將無法以管理員身份訪問該數據 由於服務帳戶不同於您的域,因此數據將不屬於您的域用戶帳戶,您可以在本文檔中查看更多相關信息。

現在與關於模擬用戶的最后一個問題有關,模擬是您代表用戶進行 API 調用的一種方式,這樣用戶就不需要在每次需要執行更改時提供 API 訪問權限,這適用於超級管理員用戶和普通用戶,這在文檔中也有說明:

在企業應用程序中,您可能希望在沒有任何手動授權的情況下以編程方式訪問用戶的數據。

與其將服務帳戶和模擬視為問題,不如將其視為一種通過 API 對用戶進行更改的方式,而無需他們授予您這樣做的訪問權限。 模擬允許您進行多項更改,並可以幫助您的組織在需要 API 調用時自動執行多項任務。

這取決於您使用的資源/方法,以及它需要的權限。

例如,您可以授予服務帳戶組讀者組管理員管理員角色,然后該服務帳戶可以調用groups資源的方法。 不需要域范圍的委派。

但這不適用於所有資源/方法,特別是它不適用於需要超級管理員權限的資源/方法。 要調用這些方法,您必須使用域范圍的委派來模擬具有超級管理員權限的用戶。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM