我开始使用node.js,express和mongodb规划REST API.API为网站(公共和私人区域)以及稍后的移动应用程序提供数据.该前端将与AngularJS一起开发.
有些日子我读了很多关于保护REST API的内容,但我没有找到最终的解决方案.据我所知,使用HTTPS提供基本的安全性.但是我如何在该用例中保护API:
只允许网站/应用的访问者/用户获取网站/应用的公共区域的数据
只允许经过身份验证和授权的用户获取私有区域的数据(并且只有用户授予权限的数据)
目前我认为只允许具有活动会话的用户使用API.为了授权用户,我将使用护照并获得许可,我需要为自己实施一些内容.全部在HTTPS之上.
有人可以提供一些最佳实践或经验吗?我的"架构"是否缺乏?
我的产品具有简单的REST API,因此产品的用户可以直接与产品功能集成,而无需使用我的Web用户界面.
最近,我一直对各种第三方感兴趣,他们将桌面客户端与API集成,以允许我的产品用户使用该第三方应用程序访问他们的数据.
我已经看到想要使用Twitter的应用程序使用Twitter托管的登录页面进行身份验证,该登录页面授予特定应用程序访问该用户数据的权限.单击"允许"或"拒绝"按钮,验证过程完成.Facebook使用与我能说的最佳机制相同的机制.
经过进一步研究,这似乎是OAuth在行动,并且看到我的API是基于.Net的,我想我应该使用DotNetOpenAuth并提供类似的机制.不幸的是,样本的文档很少(如果有的话),我在网上找到的唯一教程似乎专注于帮助您为用户提供登录机制,以便他们可以使用第三方提供商登录您的网站.
我真正想做的是让我的REST API处理我的Web应用程序的所有核心身份验证和业务逻辑,并且我的Web应用程序本质上是另一个仅通过OAuth使用API的应用程序.用户可以直接使用他们的用户名和密码在网站上进行身份验证,也可以通过第三方提供商(如MyOpenID或Facebook)进行身份验证,然后网站会以某种方式使用返回的令牌对REST API进行身份验证.

它基本上看起来我需要我的API以某种方式托管OAuth服务,但也让用户使用第三方OAuth服务.我不禁想到,我对OAuth没有足够的把握来决定我是否过于复杂化,或者我正在尝试做的事情是好事还是坏事.
有人能给我至少一个我需要采取的步骤的概述,或者我应该考虑做些什么来实现这一目标?或者指点一些教程?或者提出我的建议并告诉我,我(在架构上)这一切都是错的?