我試圖對已安裝的應用程序使用新的incremental authorization,以便在保留現有範圍的同時將範圍添加到現有授權。這是使用新的include_granted_scopes=true
參數完成的。但是,無論我嘗試過什麼,重新授權都會完全覆蓋範圍。這裏有一個最小的Bash的PoC劇本我已經寫了演示我的問題:Google OAuth 2.0 include_granted_scopes不適用於已安裝的應用程序
client_id='716905662885.apps.googleusercontent.com' # throw away client_id (non-prod)
client_secret='CMVqIy_iQqBEMlzjYffdYM8A' # not really a secret
redirect_uri='urn:ietf:wg:oauth:2.0:oob'
while :
do
echo "Please enter a list of scopes (space separated) or CTRL+C to quit:"
read scope
# Form the request URL
# http://goo.gl/U0uKEb
auth_url="https://accounts.google.com/o/oauth2/auth?scope=$scope&redirect_uri=$redirect_uri&response_type=code&client_id=$client_id&approval_prompt=force&include_granted_scopes=true"
echo "Please go to:"
echo
echo "$auth_url"
echo
echo "after accepting, enter the code you are given:"
read auth_code
# swap authorization code for access token
# http://goo.gl/Mu9E5J
auth_result=$(curl -s https://accounts.google.com/o/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d code=$auth_code \
-d client_id=$client_id \
-d client_secret=$client_secret \
-d redirect_uri=$redirect_uri \
-d grant_type=authorization_code)
access_token=$(echo -e "$auth_result" | \
grep -Po '"access_token" *: *.*?[^\\]",' | \
awk -F'"' '{ print $4 }')
echo
echo "Got an access token of:"
echo $access_token
echo
# Show information about our access token
info_result=$(curl -s --get https://www.googleapis.com/oauth2/v2/tokeninfo \
-H "Content-Type: application/json" \
-d access_token=$access_token)
current_scopes=$(echo -e "$info_result" | \
grep -Po '"scope" *: *.*?[^\\]",' | \
awk -F'"' '{ print $4 }')
echo "Our access token now allows the following scopes:"
echo $current_scopes | tr " " "\n"
echo
echo "Let's add some more!"
echo
done
腳本簡單地執行OAuth授權,然後打印出當前令牌被授權使用的範圍。理論上它應該每次都會繼續添加範圍,但在實踐中,範圍列表每次都會被覆蓋。所以這個想法將在第一次運行,你會使用像email
這樣的最小範圍,然後下一次運行,更像是隻讀日曆https://www.googleapis.com/auth/calendar.readonly
。每次只提示用戶授權當前請求的範圍,但結果令牌適用於所有範圍,包括之前運行授權的範圍。
我嘗試過一個新的client_id/secret,結果是一樣的。我知道我可以再次包含已經授權的範圍,但是會提示用戶所有範圍,即使是已經授予的範圍,我們都知道範圍列表越長,用戶接受的可能性就越小。
更新:在進一步測試期間,我注意到permissions for my app確實顯示了每個增量授權的組合範圍。在增量認證之後,我試圖等待30秒左右,然後使用刷新標記獲取新的訪問標記,但該訪問標記仍限於上一個授權的範圍,而不是組合範圍列表的範圍。
更新2:我也玩弄保持原始刷新令牌。刷新標記只獲取允許原始作用域的新訪問標記,不包括增量添加的作用域。所以看起來include_granted_scopes=true
對令牌沒有影響,舊的和新的刷新令牌繼續工作,但僅限於其指定的範圍。我無法獲得「組合範圍」刷新或訪問令牌。
你有沒有得到任何迴應? – pinoyyid
根本沒有反應。 –
我有完全相同的問題(後續訪問令牌僅對該身份驗證鏈接中請求的作用域有效,而不是前面請求的任何作用域,即使include_granted_scopes爲true)。這使得增量授權對我們來說完全無法使用,並迫使我們爲我們需要訪問的不同範圍維護不同的訪問令牌,這實際上很煩人。任何人都能理解爲什麼這不起作用(至少對我們中的一些人來說)? – David