close

因為這東西坑到極點所以決定寫一篇來抱怨跟紀錄一下,Google的東西由於本身改版過快又一直推新的東西,導致網路上能找到的東西相當的亂,文件更是亂,同一個功能能找到四五種很像的東西,然後每個都各會卡在微妙或已被淘汰的地方,又或者是介面完全不一樣了不知道改去哪設定,我猜這一篇日後等我想回來參考的時候大概整個又都不一樣了吧........(苦笑)。

 

本篇的GoogleSingin以下面這個免費套件為基底來說明

參考網址:https://github.com/googlesamples/google-signin-unity

 

Step1. 生成Keystore

先從Android的部分開始,所以使用的憑證 Keystore 勢必是第一個要生成出來的東西,不管上架或使用Google API都會需要這個憑證。

 

因為是Unity所以就直接用它內建的工具來產生Keystore,File->Build Settings->Player Setting->Publishing Settings,勾選Create a new keystore,並在Alias選擇Create a new key,就會跳出一些基本資料可以填(大部分可以先不填),確認後keystore就會生成在指定的位置。

 

Step2.產生Keystore的SHA1憑證指紋

要使用Google API如Sigin或是GCM(現為FCM)都會需要這個SHA1憑證指紋而不是keystore本體(不像Apple那邊是使用p12的實體檔案)。

參考網址:https://developers.google.com/android/guides/client-auth

keytool -exportcert -list -v \
-alias <your-key-name> -keystore <path-to-production-keystore>

keytool.exe來自於安裝的JDK之中,沒意外會擺在bin裡面,因為Unity沒指定JDK路徑的話也無法包APK,所以應該一定有裝吧。

 

Step3.建立OAuth的授權

參考網址:https://developers.google.com/identity/sign-in/android/start

這個位置中的下圖那個按鈕可以自動幫你生成幾個所需要的Client ID,或者是直接去Google API的平台自己建也可以

這裡先建立Android使用的憑證,填入package name跟上一步生成的SHA1憑證指紋,記得package name要跟你的keystore是用同一個package

這時在Google API Console可以發現兩個被建好的Client ID,一個是App本身的Android OAuth憑證,另一個是授權給你使用Google Sign in的憑證,需要的Client ID將會是後者。

 

Step4.取得使用者唯一碼(usrID, openid....etc)

套件內的Sample有個可以填入webClientId的script,基本上填上後(要使用Google Sign in那個而不是Android那個),在OnAuthenticationFinished裡task.Result內已經裝載好最終的ID (task.Result.UserId) 而不需要重新透過id_token去取得。但根據官方下面的這篇文章

參考網址:https://developers.google.com/identity/sign-in/web/backend-auth

雖然你已經知道ID,但不建議我們直接使用他,而是將id_token傳給我們自己的web server,再透過以下格式

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123

去獲得最終需要的資訊,我們想要的id藏在sub之中,可以驗證是否與client收到的id相同,另外也可以多使用官方建議的其他檢查去確認其他項目是否正確,而其中最重要的莫過於azp這個項目是否吻合在Step3中獲得的Android Client ID,附帶一提aud則會等於填在Client的webClientId。現在最後有疑慮的就是id token是在Client手上,然後透過這個API順便把其他東西也都曝露光光,是否真的是這樣做還真的令人懷疑。

 

PS:理論上來說各平台提供的OpenID是彼此不會重複的,但假如對這件事還是有疑慮的話,把OpenID的來源(SourceType)也當作複合PK的一部分比較保險。

 

 

其他參考資料:

https://developers.google.com/identity/sign-in/web/server-side-flow

https://developers.google.com/identity/protocols/OAuth2WebServer

 

arrow
arrow
    文章標籤
    #unity google signin
    全站熱搜

    不來嗯 發表在 痞客邦 留言(0) 人氣()