[英]Cloud Endpoints Authentication
我正在將App Engine Standard與Python 2運行時和Endpoints Frameworks結合使用。 發出請求時,如果請求完成,則應用程序僅返回“成功”。 我正在嘗試實施身份驗證,因此未經身份驗證的用戶無法完成請求。 我已經完成以下工作:
issuers={'serviceAccount': endpoints.Issuer('[MYSERVICEACCOUNT]', 'https://www.googleapis.com/robot/v1/metadata/x509/[MYSERVICEACCOUNT]')},
audiences={'serviceAccount': ['[MYSERVICENAME]-dot-[MYPROJECT].appspot.com']}
user = endpoints.get_current_user()
if user is None:
raise endpoints.UnauthorizedException('You must authenticate first.')
重新生成並重新部署了我的openAPI文檔。 現在,它具有security和securityDefinitions部分。
更新了我的app.yaml以引用該Endpoints版本。
重新部署我的應用
要向我的應用程序發出授權請求,我已執行以下操作:
我在Endpoints服務上為服務帳戶賦予了“服務使用者”角色。
使用Google 文檔中的generate_jwt函數生成簽名的jwt。 我正在使用服務帳戶的json密鑰文件傳遞憑據。
payload = json.dumps({
"iat": now,
"exp": now + 3600,
"iss": [MYSERVICEACCOUNT],
"sub": [MYSERVICEACCOUNT],
"aud": [MYSERVICENAME]-dot-[MYPROJECT].appspot.com
})
headers = {
'Authorization': 'Bearer {}'.format(signed_jwt),
'content-type': 'application/json'}
我收到401客戶端錯誤:未經授權的網址錯誤。 我想念什么嗎?
您的受眾群體不匹配; 在您的代碼中,您需要[MYSERVICEACCOUNT]
的受眾,但是在生成JWT時,您的受眾是[MYSERVICENAME]-dot-[MYPROJECT].appspot.com
。 這些需要匹配。
細節很少,可能值得檢查:
aud
聲明值。 羅斯指出了這一點。 payload
字典中的email
聲明。 @endpoints.method
裝飾器的scopes
字段。 在與Google取得支持票后,事實證明Google的文檔不正確。 main.py函數需要通過以下方式檢查經過身份驗證的用戶:
providers=[{
'issuer': '[YOUR-SERVICE-ACCOUNT]',
'cert_uri': 'https://www.googleapis.com/service_accounts/v1/metadata/raw/[YOUR-SERVICE-ACCOUNT]',
}]
audiences = ['[YOUR-SERVICE-NAME]-dot-[YOUR-PROJECT-NAME].appspot.com']
user = endpoints.get_verified_jwt(providers, audiences, request=request)
if not user:
raise endpoints.UnauthorizedException
進行更改后,嘗試進行身份驗證的請求時出現以下錯誤:
ProtoRPC方法實現中遇到意外錯誤:AttributeError(“ unicode”對象沒有屬性“ get”)
這是由於我如何使用json.dumps()生成有效負載而引起的。 我生成的沒有json.dumps(),如下所示:
payload = {
"iat": now,
"exp": now + 3600,
"iss": [MYSERVICEACCOUNT],
"sub": [MYSERVICEACCOUNT],
"aud": [MYSERVICENAME]-dot-[MYPROJECT].appspot.com
}
這兩個更改解決了我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.