在多个设备上共享刷新令牌(Google API)

时间:2015-05-21 16:06:56

标签: javascript api authentication google-api google-calendar-api

首先,我想描绘一下我们的情况。我们有2个浏览器Web应用程序。一个应用程序没有输入功能(想想数字标牌),另一个是用于设置第一个应用程序的管理网站。需要支持多个用户。

我们希望在管理网站上设置Google Calendar API,并使用具有有限输入功能的设备上的凭据。

我考虑过共享刷新令牌,因为两个应用程序都位于Google控制台的同一个项目中。我不确定这是否可行,但我想尝试一下。唯一的问题是,我找不到刷新令牌。我在使用Google API客户端时只能找到access_token。

编辑:我使用了这样的API客户端:

function handleClientLoad() {
    // Step 2: Reference the API key
    gapi.client.setApiKey(API_KEY);
    window.setTimeout(checkAuth, 1);
}

function checkAuth() {
    gapi.auth.authorize({ client_id: CLIENT_ID, scope: SCOPES, immediate: true}, handleAuthResult);
}

function handleAuthResult(authResult) {
    console.log(authResult);        
}

function handleAuthClick(event) {
    // Step 3: get authorization to use private data
    gapi.auth.authorize({ client_id: CLIENT_ID, scope: SCOPES, immediate: false }, handleAuthResult);
    return false;
}

// Load the API and make an API call.  Display the results on the screen.
function makeApiCall() {
    gapi.client.load("calendar", 'v3').then(function () {
        var request = gapi.client.calendar.calendarList.list();

        request.then(function (resp) {
            resp.body = JSON.parse(resp.body);
            console.log(resp);
        });
    });
}

这可行,但我在响应中没有刷新令牌。我只获得了一个访问令牌。

如果我尝试通过HTTP请求(使用Google API客户端)获取refresh_token,则会收到CORS错误。我在某处读到你需要使用Google API客户端来处理CORS请求,这有点糟糕。

编辑:这是我已经尝试过的

$.ajax({
    method: "GET",
    url: "https://accounts.google.com/o/oauth2/auth",
    contentType: 'application/x-www-form-urlencoded',
    data: {
        client_id: CLIENT_ID,
        scope: "calendar.readonly",
        key: API_KEY,
        redirect_uri: REDIRECT_URI,
        response_type: "code"

    }
}).success(function (data) {
    console.log(data);
});

这是我得到的错误(我划掉了个人数据): http://prntscr.com/794l50

我知道输入有限的设备的Google API流程。但是,您无法在管理网站上设置Calendar API。您需要使用limitid输入在设备上显示链接和代码。然后用户必须浏览链接并输入代码。这是一种有效的方法,但会破坏我们的应用连续性我们想在管理网站上设置所有内容。我们不希望用户必须执行这些繁琐的步骤。我们的用户友好性对我们非常重要。

我想知道你们是否对如何获得刷新令牌有任何想法? 其他想法也很受欢迎:)。

0 个答案:

没有答案