我正在为我正在开发的项目构建一个RESTful API,我想让主应用程序使用API,因为:
API将托管在子域https://api.example.com
上,主Web应用程序将托管在根域https://example.com
上。
从概念上讲,我理解一切是如何运作的,但我的主要问题是如果认证流程将会发生变化。通常第三方应用程序会:
https://api.example.com/request_token
https://api.authenticate.com/authorize
https://api.example.com/access_token
由于我控制两个域,我可以做类似的事情:
https://www.example.com
https://www.example.com
上的表单进行身份验证,该表单调用与https://api.example.com/authorize
相同的代码第3步觉得它错了,因为会有重复的代码,但不会打开我的XSS攻击是https://www.example.com
上的登录表单将数据发送到https://api.example.com
,因为它们是< em>技术上不同的域名?
我是否过于复杂?
答案 0 :(得分:20)
我遇到了同样的问题,并解决了这个问题。
<强> 1 强> 对于使用我的API的第三方应用,他们必须通过OAuth对所有请求进行身份验证。
<强> 2 强> 对于我自己的第三方客户端(移动设备,AIR等) - 他们使用OAuth,区别在于我允许这些客户端直接在授权步骤中发送用户名和密码(因此我可以进行本地登录对话)。这是因为您的API是通过SSL / HTTPS。
第3 强> 对于我的Web应用程序,我使用cookie身份验证来访问API。即登录后,用户可以简单地调用API:urls并返回JSON / XML。很适合快速浏览API(尽管像APIGee这样的真实API控制台在那里做得更好)。
答案 1 :(得分:0)
我会说你过度复杂了一点。如果您的代码正确分离,您可以轻松地在应用程序的服务层上构建一个瘦REST层,同时让应用程序的控制器成为服务层上的薄层。