我已经成功使用了Facebook Graph API(使用oauth 2.0进行身份验证)一段时间。现在我需要编写自己的API,使开发人员可以以类似的方式连接到它。我研究了各种库,但我想要更简洁的东西,所以我决定自己动手。看着我在Facebook上认证用户的代码似乎相对简单,但如果我偏离了轨道,请纠正我。
首先,我需要提供一个安全页面,消费者需要重定向到该页面。例如 https://api.mydomain.com/oauth/authorize?client_id=CONSUMER_KEY&redirect_url=CALLBACK_URL。用户会验证应用程序,然后我会将oauth_token作为查询字符串重定向回回调URL中提供的URL。我想我可以在这里生成一个随机唯一字符串作为oauth_token,并将其存储在此特定消费者的用户中(编辑:请参见下面的答案,这应该是每个consumer应用程序而不是用户的唯一标识符)。
第一步完成了。现在我需要提供第二个安全页面,其中消费者将触发Web请求。例如 https://api.mydomain.com/oauth/access_token?client_id=CONSUMER_KEY&client_secret=CONSUMER_SECRET&oauth_token=OAUTH_TOKEN_RETURNED_ABOVE。这将允许消费者交换上述返回的oauth_token以获得访问令牌。我会再次生成一个随机唯一字符串,并将其存储在此特定消费者的用户中。
现在,我的API将接受access_token,用于尝试获取特定于使用它的用户的信息的方法。
我希望知道自己是否正确理解了这些事情。如果是这样,OAuth 2.0 规范似乎非常琐碎。那么为什么我们必须用 access_token 来交换 oauth_token?我有自己的想法,但如果有人能帮助澄清就会非常感激。
如果我完全错误地实现了这个功能,我不希望浪费数小时的时间,所以我真的很期待您的反馈。
谢谢