首先,我想描绘一下我们的情况。我们有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输入在设备上显示链接和代码。然后用户必须浏览链接并输入代码。这是一种有效的方法,但会破坏我们的应用连续性我们想在管理网站上设置所有内容。我们不希望用户必须执行这些繁琐的步骤。我们的用户友好性对我们非常重要。
我想知道你们是否对如何获得刷新令牌有任何想法? 其他想法也很受欢迎:)。