危機處理:
客戶:為什麼不能用了,不能登入我們要怎麼作業 OOXX.
PM:好的我們馬上處理 <=聯絡工程師,並且安撫客戶
RD:我什麼都沒動欸,為什麼突然不能用了,前幾天還好好的,生氣氣!
DevOps:我來幫你看看,除錯的過程中...
PM:我也來幫忙找原因為什麼不能用,另外一個系統的 Google oauth 也不能用了
RD:什麼?難道是同一個問題!
PM:你們快點找出問題,我來跟客戶說先用帳號密碼登入,這是 Google 的問題,我們也是受害者,需要時間修復
!
DevOps:我發現你們用的 Oauth App ID的帳號他說今天到期,會是沒有繳錢被停用了嗎?
PM:我打電話去問 Google 客服,幹!客服説我們是免費帳戶,不提供技術支援,但是歡迎在上面留言!還是我們換一組 Oauth App ID
DevOps:替換到 Oauth App ID 之後,還是一樣的問題,初步排除 Oauth App ID 問題,還是用官方範例的插件重寫試試看
.
RD:我先回去寫原本的程式,比較不會讓費時間
PM:好的
DevOps:我使用官方插件還是一樣遇到一樣的問題,改回原來的寫法,網路搜尋也沒什麼人遇到這個問題,太奇怪了!再重寫的過程中發現 redirect_url 怪怪的後面的帶了不必要的參數,另外 scope 改用官方範例的寫,發現錯誤提示不一樣了,好像是 redirect_url 和 scope 問題,在測試一下發現可以正常使用了,太神奇了!
PM:那趕快更新系統,看系統可不可以正常運作了
RD:更新完了可以正常運作!
PM:還好不用加班解決這個問題了!
DevOps、RD、PM 我們一致認為是 Google 害了我們
DevOps:我發現晚上在記錄問題的時候,又重新測試了一次發現是redirect_url 變嚴格了,不是 Scope 的問題,我們誤會 Google 修改了 scope profile 的權限了!
DevOps:我發現晚上在記錄問題的時候,又重新測試了一次發現是redirect_url 變嚴格了,不是 Scope 的問題,我們誤會 Google 修改了 scope profile 的權限了!
Oauth 架構如下圖:
四步驟:
1. 使用者點選 Google Login 按鈕,會導入 Google 登入畫面Scope=profile%20email&
https://accounts.google.com/o/oauth2/v2/auth? client_id=424911365001.apps.googleusercontent.com& response_type=code& scope=openid%20email& redirect_uri=https://oauth2-login-demo.example.com/code&2. 使用者登入Google Account 後,會呼叫後端的Callback url,並且取得 code
3. 拿使用者 code 去 Google API 取得 Token
POST /oauth2/v4/token HTTP/1.1 Host: www.googleapis.com Content-Type: application/x-www-form-urlencoded code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7& client_id=8819981768.apps.googleusercontent.com& client_secret={client_secret}& redirect_uri=https://oauth2-login-demo.example.com/code& grant_type=authorization_code4. 拿到使用者 Token 再去讀取使用者資料
問題:
我發現問題出在第三步驟,會回傳 400 錯誤'{
"error": "invalid_grant",
"error_description": "Bad Request"
}'
,更換了Oauth API 的 App ID 和 App Secret,但時一樣會遇到 Bad request 問題,
後來更換了兩個地方,
一個是 redirect_url 和 scpe(openid、email) ,
發現可以正常拿到值了,太棒了,我們都以為是 google 偷偷改了 oauth scope 才會讓 profile 不能用了,正當我們很開心解決的問題,以為沒事了...但是當我想說來記錄一下今天的問題,重新測試了一次,發現 profile 又可以用了,太神奇了傑克,反覆測試之後發現原來是 redirect_url 的問題,不知道為什麼redirect_url 檢查變嚴格了,整件事情峰迴路轉啊!
參考:
Using OAuth 2.0 to Access Google APIs
OpenID Connect
沒有留言:
張貼留言