我有一个客户希望将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范围。这为您的应用提供了一个额外的代码,称为刷新令牌,您的应用可以在需要时使用它来获取新的访问令牌 - 即使在用户注销后 - 通常最多一年。但是,用户可以随时撤消您应用的访问权限。如果用户选择撤销对您的应用的同意,则无法使用相应的访问权限或刷新令牌 - 您的应用必须再次要求用户完成登录和同意过程。
因此,看起来刷新令牌持续一年。这意味着我可以安装一些东西来获取刷新令牌,存储它,并在每个页面请求上使用刷新令牌获取访问令牌并显示数据。但是,每年一次,我必须更新此客户端的刷新令牌并存储它。这听起来是对的,这是最好的方法吗?
答案 0 :(得分:1)
OAuth 2有一个特殊的流程,名为Client Credentials Grant。
Google已经使用服务帐户和客户端证书实现了此功能,如this answer中提到的另一个问题。
但是,到目前为止,Microsoft 不 implement that flow,所以目前最好的方法是使用您已经用于Google文档的变通方法。