您如何对单个Skydrive帐户进行身份验证,而不是要求用户提供凭据?

时间:2012-08-31 20:09:40

标签: php oauth-2.0 onedrive

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

Live Connect上的API文档(http://msdn.microsoft.com/en-us/library/live/hh243647.aspx)似乎专注于向用户显示登录表单以将用户的凭据发送到服务。再说一遍,这不是我想要的。该网站的用户不应该做任何事情,只能转到该页面,他们将看到从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范围。这为您的应用提供了一个额外的代码,称为刷新令牌,您的应用可以在需要时使用它来获取新的访问令牌 - 即使在用户注销后 - 通常最多一年。但是,用户可以随时撤消您应用的访问权限。如果用户选择撤销对您的应用的同意,则无法使用相应的访问权限或刷新令牌 - 您的应用必须再次要求用户完成登录和同意过程。

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

1 个答案:

答案 0 :(得分:1)

OAuth 2有一个特殊的流程,名为Client Credentials Grant

Google已经使用服务帐户客户端证书实现了此功能,如this answer中提到的另一个问题。

但是,到目前为止,Microsoft implement that flow,所以目前最好的方法是使用您已经用于Google文档的变通方法。