在chrome扩展程序中,如何从当前chrome用户以外的gmail用户获取访问令牌?

时间:2018-11-17 12:18:26

标签: google-chrome-extension google-oauth gmail-api

我创建了一个chrome扩展程序,该扩展程序可以在mail.google.com页面上使用并使用gapi来管理电子邮件,如果chrome用户与gmail用户不匹配,则效果不佳。

原因是我从chrome.identity.getAuthToken夹中获取了一个access_token,它为我提供了chrome当前用户,但没有gmail用户。

我尝试在扩展程序中使用gapi.auth2来让gmail用户访问令牌,但是没有运气:

  • 当从background.js中使用时,会收到“ gapi.auth2.ExternallyVisibleError:无效的cookiePolicy”错误

  • 当从content.js使用相同的代码时,它会收到“ gapi undefined”错误。

有没有办法从当前的Gmail用户(而不是Chrome用户)获取access_token?

1 个答案:

答案 0 :(得分:1)

chrome.identity.launchWebAuthFlow为我工作。

创建oauth2网址:

buildscript {
    repositories {
        jcenter()
        google()
        maven {
            url 'https://maven.fabric.io/public'
        }
        //  Add this to your project 
        maven { url 'https://dl.bintray.com/android/android-tools' }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath 'com.google.gms:google-services:4.2.0'

        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
        // These docs use an open ended version so that our plugin
        // can be updated quickly in response to Android tooling updates

        // We recommend changing it to the latest version from our changelog:
        // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin
        classpath 'io.fabric.tools:gradle:1.27.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com/'
        }
        google()
    }
}

redirectUri var url = 'https://accounts.google.com/o/oauth2/auth' + '?client_id=' + clientId + '&response_type=token' + '&redirect_uri=' + redirectUri + '&login_hint=' + email + '&scope=' + scopes; 的位置,并且必须位于“授权重定向URI”列表中(在开发人员控制台中)。我在这里有些挣扎,因为最初我创建了“ chrome应用”凭据,并且没有授权的重定向URI选项,所以我切换到了“网络应用”凭据。

电子邮件是当前用户的电子邮件。如果用户已经具有权限,则指定电子邮件有助于省略对话框。

clientId 范围需要手动指定,它们不会从清单中自动获取。

然后运行launchWebAuthFlow:

https://<your extension id>.chromiumapp.org/oauth2