我有谷歌云功能,它是可訪問的,https://us-central1-project.cloudfunctions.net/update
我也有角色為“呼叫谷歌云功能”的服務帳戶
首先,我需要驗證請求,為此我使用https://github.com/googleapis/google-auth-library-ruby
我已經google_cloud.json為我的服務帳戶創建了,我正在做
credentials = Google::Auth::ServiceAccountJwtHeaderCredentials.make_creds({json_key_io: File.open('./config/google_cloud.json'), scope: 'https://www.googleapis.com/auth/
cloud-platform'})
headers = {}
credentials.apply(headers)
輸出看起來像
{:authorization=>"Bearer ENCODED_TOKEN"}
那我在做
curl -X POST -H "Authorization: Bearer ENCODED_TOKEN" -H 'Content-Type: application/json' -d '{"data":["user1"]}' "https://us-central1-project.cloudfunctions.net/update"
它回傳 HTML
<h2>Your client does not have permission to the requested URL <code>/update_statuses</code>.</h2>
如果我有一個 VPS 服務器應該向 Google Cloud Function 發出 API 請求,我應該如何授權它?
uj5u.com熱心網友回復:
正如@DazWilkin 所提到的,通過運行gcloud auth print-identity-tokenthen 來啟用服務帳戶以獲取身份令牌,您可以gcloud auth print-identity-token --account=${ACCOUNT}在哪里找到ACCOUNT服務帳戶的電子郵件地址。
更多細節可以參考官方檔案。
uj5u.com熱心網友回復:
我終于明白了。問題中的代碼應該用于獲取Access Token,但對于呼叫 Google Cloud Functions 我需要ID Token。為此,scope我們需要將函式 url 傳遞為target_audience
google_url = 'https://us-central1-project.cloudfunctions.net/update'
path = File.join(__dir__, '../config/google_cloud.json')
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: File.open(path), target_audience: google_url)
token = authorizer.apply({})[:authorization]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/478572.html
