5

我有一个客户想使用 SkyDrive 作为网站的云存储。该网站不会要求该网站的用户提供他们的 SkyDrive 帐户以向他们展示他们的文件,而是该网站的所有者将在 SkyDrive 中存储一些文件,并希望与登录到其网站的用户共享这些文件。我的问题是,如何直接从网站的后端 PHP 代码向 SkyDrive API 发送凭据?

Live Connect ( http://msdn.microsoft.com/en-us/library/live/hh243647.aspx ) 上的 API 文档似乎专注于向用户提供登录表单以将用户的凭据发送到服务。再说一次,这不是我想要的。该网站的用户无需执行任何操作,只需转到该页面,他们将看到从 SkyDrive 帐户镜像的文件。凭据应存储在服务器上,并在用户请求页面时发送。

我问了一个关于 Google Docs 的类似问题(How do I connect to the Google Calendar API without the oAuth authentication?)。这个问题的答案是设置一个临时脚本来获取一个刷新令牌,该令牌可以一遍又一遍地用于身份验证。我试过了,它确实有效。但是,我不确定刷新令牌的持续时间以及相同的方法是否适用于 SkyDrive API。

编辑:在做了更多研究之后,Live Connect Docs ( http://msdn.microsoft.com/en-us/library/live/hh826540 ) 说:

在用户提供同意后,Live Connect 会为您的应用程序提供一个特殊代码或访问令牌,让您的应用程序可以使用他或她同意的用户信息部分。通常,此访问令牌的有效期约为一小时。在这一小时结束后,您的应用将无法再使用用户的信息——它必须要求用户再次完成登录和同意流程。要解决此问题,您可以要求用户同意 wl.offline_access 范围。这为您的应用程序提供了一个额外的代码,称为刷新令牌,您的应用程序可以在需要时使用它来获取新的访问令牌 - 即使在用户注销之后 - 通常长达一年。但是,用户可以随时撤销您的应用程序的访问权限。如果用户选择撤销对您的应用的同意,

因此,刷新令牌似乎持续了一年。这意味着我可以装配一些东西来获取刷新令牌,存储它,然后在每个页面请求上,使用刷新令牌来获取访问令牌并显示数据。但是,每年一次,我必须更新此客户端的刷新令牌并存储它。这听起来对吗?这是最好的方法吗?

4

1 回答 1

1

OAuth 2 专门为此提供了一个特殊流程,称为Client Credentials Grant

正如您对其他问题的回答中所提到的,Google 已经使用Service AccountsClient certificate实现了这一点。

但是,到目前为止,Microsoft 还没有 实现该流程,因此您目前最好的方法是使用您已经用于 Google Docs 的解决方法。

于 2012-09-03T17:49:11.257 回答