2017-04-13 333 views
-1

我需要获取google + signIn tokenId。Google signIn tokenId is invalid_token

这里是我的代码:

var mGSO = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
        .requestIdToken(WEB_CLIENT_ID)//from developer console 
        .requestEmail() 
        .build() 
      mGoogleApiClient = GoogleApiClient.Builder(mActivity) 
        .enableAutoManage(mActivity, this) 
        .addApi(Auth.GOOGLE_SIGN_IN_API, mGSO) 
        .build() 

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
     super.onActivityResult(requestCode, resultCode, data) 
     val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data) 
     var tokenId = result.signInAccount.idToken 
    } 

所以我顺利拿到tokenId,但是当我尝试点击此处查看(https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=)我收到消息:

{ 
"error": "invalid_token", 
"error_description": "Invalid Value" 
} 

每次令牌相同的I尝试获得它! 发生了什么? 任何想法如何解决这个问题?

UPDATE

发现这个问题:https://github.com/PhilipGarnero/django-rest-framework-social-oauth2/issues/61

我用的是从我的登录iOS上的错误谷歌令牌。我 最初使用user.authentication.idToken这是错误的,并且 不起作用。

正确的标记是user.authentication.accessToken。

,但我不能找到GoogleSignInResult对象的任何类似的accessToken ....

更新2

我使用调试APK。 这里是我的按钮,单击代码:

fun onGooglePlusClicked(v: View) { 
     val signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient) 
     mActivity?.startActivityForResult(signInIntent, GOOGLE_SIGN_IN) 
    } 
+0

您是否使用Firebase身份验证登录 – Nithinlal

+0

否,仅限Google +登录 –

+0

请确保该文件位于正确位置的google-services.json中。那么在应用程序文件夹 – Nithinlal

回答

0

答案在这里成立: https://developers.google.com/identity/protocols/CrossClientAuth

关键词:GoogleAuthUtil.getToken()

所以,这是我更新的代码:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { 
     super.onActivityResult(requestCode, resultCode, data) 
     val result = Auth.GoogleSignInApi.getSignInResultFromIntent(data) 

     Observable.create(Observable.OnSubscribe<String> { 
        var **accessTokent** = GoogleAuthUtil.getToken(mActivity!!, result.signInAccount.account, "oauth2:" + Scopes.PLUS_LOGIN) 
        //send token to server 
       }) 
         .subscribeOn(Schedulers.io()) 
         .observeOn(AndroidSchedulers.mainThread()) 
         .subscribe() 
    } 

希望这会帮助别人:)

相关问题