当前位置: 首页 > 知识库问答 >
问题:

在Android中通过GoogleAuthUtil从Google Drive API获取访问令牌

申屠瀚海
2023-03-14

下面是我的代码,

    @Override
    protected String doInBackground(String... params){
        String accountName = params[0];
        //String scopes = "oauth2:profile email"; // This can work !
        String scopes = "oauth2:server:client_id:7666010xxxxx-dm0d37oxxxxxxxih8k5sm5g7tajetubk.apps.googleusercontent.com:api_scope:https://www.googleapis.com/auth/drive";
        String token = null;
        try{
            token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes);
        }
        catch (IOException e){
            Log.e(excpTAG, "IO Exception: " + e.getMessage());
        }
        catch (UserRecoverableAuthException e){
            startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
        }
        catch (GoogleAuthException e)
        {
            Log.e(excpTAG, "GoogleAuthException: " + e.getMessage());
        }
        return token;
    }

在我的实证测试中,我可以通过将作用域设置为

String scopes = "oauth2:profile email";

然而,当我想访问用户的谷歌驱动器时,我遵循了开发文档中的说明

String scopes = "oauth2:server:client_id:766601xxxxxx-dm0dxxxxxxxxxxxxxxxx7tajetubk.apps.googleusercontent.com:api_scope:https://www.googleapis.com/auth/drive";

当应用程序执行时,Android-Studio中的日志猫总是提到异常事件GoogleAuthException发生,并且事件消息为“未知”。

在Android中获得谷歌驱动器访问令牌的正确方法是什么?多谢.

共有1个答案

张鹏鹍
2023-03-14

我终于找到了答案!

这个问题的主要原因应该是Google API Console和Android-Studio之间的包名证书指纹(SHA1)不一致

在某些范围内,不一致会导致授权异常错误。

当Android-Studio中的包名证书指纹(SHA1)与Google API控制台中的不一致时,Google API不会简单地拒绝所有请求。有些作用域如drivescopes.drive触发了异常错误,而其他作用域如oauth2:profile email则没有。

 类似资料:
  • 需要使用passport为laravel构建api系统。在拉威尔。2 Oauth 2集成有一个单独的类授权程序,用于执行通过访问令牌获取用户数据的操作方式 但在passport中,没有基于访问令牌获取用户详细信息的单独方法。有人能帮我吗?

  • 我正在写一个小小的短信网关,供几个项目使用, 我实现了laravel passport身份验证(客户端凭据授予令牌) 然后,我向api中间件组添加了: 逻辑工作正常,现在在我的控制器中,我需要让客户机与有效令牌关联。 routes.php 出于明显的安全原因,我无法将客户端id与消费者请求一起发送,例如,

  • 在我的web应用程序中,我使用Firebase进行身份验证,要访问任何API,我必须从Firebase进行身份验证。 问题:如何在Postman中获取firebase的访问令牌? 我有两种解决此问题的方法: 1) 在postman中从firebase获取访问令牌,并将该访问令牌存储在postman global env中。变量,然后我可以执行其他API请求。(这里我不知道如何在邮递员那里获得访问令

  • 我有一个由 AAD B2C 访问令牌保护的 REST API。我现在想要添加可用于 API 负载测试的 Web 测试。 我跌跌撞撞地从AADB2C为我的测试用户获取了一个有效的访问令牌。我想以某种方式从对AADB2C的REST API调用中获取一个令牌作为响应。 在网上朝这个方向看,我已经找到了许多指向这个没有记录的endpoint的页面 其中我需要提供一些参数。到目前为止,我发现 < li >客

  • 我可以使用OAuth2和Rails通过reddit fine登录到我的localhost站点,但是当我试图发出后续(必需的)POST请求以获取进行实际API调用所需的访问令牌时,我得到了响应‘invalid _ grant’。OAuth reddit文档(这里)说invalid_grant的意思是“代码已经过期或者已经被使用了”。 但我确信它没有被重用,我已经移动了代码以确保它不能运行两次,并且正