php – 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页面.

>在Google Api Console下转到API Access
>生成新的客户端ID并选择已安装的应用程序(因为您将对您的服务器进行身份验证,因为您不是您的用户)
>使用控制台应用程序或一次性PHP页面使用OAuth和您的Google帐户(具有您要访问的日历的帐户)进行身份验证
>在从身份验证返回时,应该有续订令牌(称为续订或刷新或类似的东西).保存此字符串并使其可供PHP站点使用.
>当您需要访问该服务时,您的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) {...}

现在已更新的AuthorisationState可用于验证您对API所做的调用.这个状态可以多次使用,直到它到期,然后可以刷新.当您将自己的应用程序身份验证为自己而不是用户时,所有会话都可以共享AuthorizationState.当前AuthorizationState和刷新令牌都应安全地保存在您的服务器上,并且永远不会发送到客户端,如果您曾将这些作为响应的一部分发送,您的客户端将具有与您的代码应用程序相同的权限

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...