[英]Access code for Google Oauth2 in Chrome app - invalid credentials
在一個Web應用程序中,我開發了一種客戶端服務器身份驗證 ,該身份驗證正常工作,流程如下:
grantOfflineAccess
生成訪問代碼 client_id
),檢查代碼的完整性,然后向Google要求使用帶有refresh_token
的access_token
。 現在,我想在Chrome應用中生成訪問代碼,以便將訪問代碼傳遞到(同一台)服務器,以請求令牌以供離線離線使用。
使用用於Web應用程序的相同client_id
,我使用chrome.identity.launchWebAuthFlow
請求代碼,並帶有以下url參數(出於可讀性的考慮):
https://accounts.google.com/o/oauth2/v2/auth?
scope=profile email https://www.googleapis.com/auth/drive
include_granted_scopes=true
state=state_parameter_passthrough_value // I actually left this as it is
redirect_uri=https://<app-id>.chromiumapp.org/chromelogin
response_type=code
access_type=offline
client_id=[same_as_webapp]
這實際上有效,並且我確實獲得了訪問代碼,這是傳遞給傳遞給chrome.identity.launchWebAuthFlow
的回調的url的一部分。
問題在於,當我隨后將訪問代碼發送到我的Web服務器時,當它嘗試生成令牌時,我收到了Invalid Credentials 401
錯誤。
我想念什么嗎?
我還嘗試使用另一種client_id
,它是通過應用程序ID專門與Chrome應用程序綁定的。 在這方面,我沒有檢查,在關鍵manifest.json
等於所安裝應用提供的密鑰(如描述在這里 )。 但是,成功生成訪問代碼后,服務器會收到相同的錯誤消息。
編輯
在服務器端,我使用訪問代碼來生成令牌:
$aCode = $_POST['authcodefromclient'];
$token = $googleClient->authenticate( $aCode );
這是OAuth流程的簡短摘要。
首次請求授權時,您將獲得短暫的訪問代碼 。 使用此訪問代碼來請求脫機刷新令牌 。 保存刷新令牌。 每當您的應用程序需要訪問受保護的資源時,它都會使用刷新令牌來請求訪問令牌 。 調用Google API時,此訪問令牌將作為http授權標頭提供。 從您的描述中可以看出,您應該使用訪問令牌時正在使用訪問代碼。
可以通過chrome.identity.launchWebAuthFlow()
,但是這將需要Chrome用戶輸入其登錄憑據。 查看此答案: 使用Chrome Identity API獲取id_token
如果您不需要長時間訪問用戶的Google帳戶,則可以使用chrome.identity.getAuthToken
的access_token
臨時訪問。 我之所以這樣,是因為Chrome用戶無需輸入其憑據(如果他們已登錄Chrome瀏覽器或ChromeBook)。 我將access_token
傳遞到服務器,然后通過調用以下命令進行驗證: https : //www.googleapis.com/oauth2/v3/tokeninfo? access_token
= {0}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.