在Unity中将Firebase IDToken转换为Google OAuth2访问令牌

时间:2020-05-28 06:57:22

标签: firebase unity3d google-oauth google-authentication

我们在Unity游戏和Google SignIn中使用Firebase Auth,并且需要访问Google服务,例如Google Classroom。

使用此代码https://firebase.google.com/docs/auth/admin/verify-id-tokens#unity登录后,Firebase Auth为我们提供了JWT IdToken

Firebase.Auth.FirebaseUser newUser = task2.Result;
var token = await newUser.TokenAsync(false); 

我尝试将此令牌传递给Google课堂服务,但它需要OAuth2 AccessToken。

如何将JWT Firebase IdToken转换为GoogleClassroom API可以使用的AccessToken?

我正在寻找要传递给Google Classroom API的AccessToken

var credential = GoogleCredential.FromAccessToken(AccessToken);
var service = new ClassroomService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });

我已经尝试过answer这个问题,但是服务返回了404。

1 个答案:

答案 0 :(得分:1)

您正在尝试获取Google访问令牌。 您只需通过简单的API调用即可获取它。

IEnumerator GetAccessToken()
        {
            WWWForm form = new WWWForm();
            form.AddField("client_id", "your_webClientId");
            form.AddField("client_secret", "your_clientsecret");
            form.AddField("grant_type", "authorization_code");
            form.AddField("code", "your_authcode);
            UnityWebRequest www = UnityWebRequest.Post("https://www.googleapis.com/oauth2/v4/token", form);
            yield return www.SendWebRequest();

            if (www.isNetworkError || www.isHttpError)
            {
            }
            else
            {

                //Access token response
                GoogleData googleData =JsonUtility.FromJson<GoogleData>(www.downloadHandler.text); 
                Debug.LogError(googleData.access_token);
                
            }
        }

如果API成功,则可以将响应解析为数据模型类。 注意:请勿更改“ grant_type”字段值。

[System.Serializable]
    public class GoogleData
    {
        public string access_token;
        public string token_type;
        public int expires_in;
        public string refresh_token;
    }