我正在开发API,并考虑使用OAuth(三级方法)进行身份验证和授权。
这是的基本思想
- 为了让客户端(移动应用程序或网络应用程序)使用此RESTful API,用户必须使用身份提供商/服务器登录,如Google、Facebook e.t.c
基本上有三方将在这里互动:
- 移动/网络应用程序:试图访问我的API的应用程序
- API:包含应用程序运行数据的网站
- 身份服务器:允许用户登录以访问API的网站
现在,我理解这个过程的方式(假设我理解)。这将是流程(总结):
- 用户将尝试从API(消费者)访问数据
- 消费者发现用户未登录
- 用户获得一个页面(带有服务提供商按钮,如使用谷歌登录)
- 用户点击按钮,服务提供商返回登录表单
- 用户登录
- 服务提供商返回一个请求特定权限的页面
- 用户授予权限
- 服务提供商向用户返回访问令牌
- 用户使用访问令牌再次尝试向消费者请求(API)
- 消费者获取令牌,并根据服务提供商对其进行验证
- 使用者授予用户访问权限
第一个
这个过程是正确的(在更高的层面上),还是我完全误解了整件事。如果不正确:你能提供一些调整吗?
第二次
经过这整个过程。消费者如何与用户沟通?我是否必须在每次请求时传递一个令牌(在移动应用程序和API之间)?或者我可以只使用服务提供商的用户详细信息来识别用户吗?
第三次
消费者(API)如何针对服务器验证用户提供的令牌?这已经在OAuth中实现了吗?还是我必须自己实现?
第四个和最后一个
在实现方面,客户端(移动应用程序/网络应用程序)和消费者(API)之间有什么区别?
我是这方面的新手,我正在尝试用PHP(API)实现它。如果您对PHP代码(示例实现)或外部资源有任何参考,我将非常感谢:-)
我也是oauth的新手,但我会尽力提供帮助。首先,您可以在这里查找可以提供帮助的适当库。
就我而言,你的胡言乱语是正确的。你也可以在这里找到很好的解释。请记住,授权服务器应该返回用于获取访问令牌的授权代码。
所以你的问题:
1) 按照第二个链接-"授权代码"。
2) 对于每一个给你的请求API,你应该发送你的访问令牌。类似的东西
http://<your api>?access_token=7f813af1-381d-4dd7-b70b-b6a8399b2c00
3) 只需使用第一个链接中的库。我希望他们已经实施了这一点
4) 不能完全理解你的意思。您的客户端必须能够获取访问令牌,存储它并随请求一起发送。API服务器必须能够从客户端接收访问令牌,并在访问令牌正确的情况下授予对API的访问权限。