Google Calendar API v3-使用硬编码的凭据进行身份验证

我正在编写一个PHP应用程序,该应用程序应允许用户将某些事件添加到私有Google日历中。日历是我所有的,我需要一种使PHP使用固定凭据与日历API通信的方法(每个人都可以使用网站上的表单添加事件,但是日历本身并不公开)。

据我所读,使用v1 API中的ClientLogin可以实现。但是,在v3

API中,可用选项为OAuth2.0或API密钥。使用API​​密钥似乎无效,因为它只能用于不需要授权的请求,而且OAuth也不正确,因为用户不应该访问自己的日历,但是我可以使用应用程序使用。

我曾考虑过以编程方式获取OAuth令牌,但这势必会迟早中断,因为OAuth对话框可以使用验证码。

这似乎是一个标准的用例-一个Web应用程序,允许用户以某些预定义的方式与单个日历进行交互-但我找不到在v3 API中如何实现它的任何文档。谁能帮我?

回答:

您将需要同时使用开发者密钥(API密钥)和OAuth2。开发人员密钥对谁编写软件进行身份验证,并用于配额之类的事情,配额是基于每个开发人员而不是每个用户的。OAuth2用于用户身份验证,将需要访问非公共日历。

OAuth2具有续订令牌,您可以从中生成会话令牌,这意味着您无需屏幕刮OAuth屏幕即可进行身份验证。为此,我将编写一个小的命令行应用程序,或者使用一个关闭的PHP页面。

  1. 在Google Api控制台下,转到API访问权限
  2. 生成一个新的客户端ID并选择Installed Application(已安装的应用程序)(因为您将以不作为用户的身份验证服务器)
  3. 使用控制台应用程序或一个关闭的PHP页面,使用OAuth和您的Google帐户(带有您要访问的日历的帐户)进行身份验证
  4. 在认证返回中,应该有一个续订令牌(称为续订或刷新或类似的东西)。保存此字符串,并将其提供给您的PHP站点。
  5. 当您需要访问服务时,您的OAuth库应进行续订/刷新调用。下面是使用.Net的示例。


private IAuthorizationState CreateAuthorization(NativeApplicationClient arg)

{

// Get the auth URL:

IAuthorizationState state = new AuthorizationState(new[] { AdsenseService.Scopes.AdsenseReadonly.GetStringValue() });

state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);

if (refreshToken.IsNotNullOrEmpty()) // refreshToken you stored in step 4

{

try

{

state.RefreshToken = refreshToken;

if (arg.RefreshToken(state)) // This is calling out to the OAuth servers with the refresh token getting back a session token, returns true if successful.

{

if (state.RefreshToken != refreshToken) // if the refresh token has changed, save it.

{

PersistRefreshToken(authorization.RefreshToken);

}

return this.authorization = state; // Retain the authorization state, this is what will authenticate your calls.

}

}

catch (ProtocolException ex) {...}

现在可以将已更新的AuthorizationState用来验证对API的调用。此状态可以使用很多次,直到到期,然后可以刷新。当您以自己(而非用户)身份验证应用程序时,所有会话都可以共享此AuthorizationState。当前的AuthorizationState和刷新令牌都应安全地保存在您的服务器上,并且永远不要发送给客户端,如果您将它们作为响应的一部分发送,则您的客户端将具有与代码应用程序相同的特权

以上是 Google Calendar API v3-使用硬编码的凭据进行身份验证 的全部内容, 来源链接: utcz.com/qa/406101.html

回到顶部