使用OAuth保护我的REST API,同时仍允许通过第三方OAuth提供者进行身份验证(使用DotNetOpenAuth)

我有一个带有简单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来决定我是否过于复杂,或者我试图做的是做一件好事还是坏事。

有人能给我至少一个我需要采取的步骤的广泛概述,或者我应该看看做什么? 或者指点一些教程? 或者抨击我的建议并告诉我,我正在讨论这个(架构上)全错的?


首先我想强调认证和授权的区别:

用户通过提供一些凭证(如用户名+密码)向您的网站进行身份验证。 OpenID允许用户通过向另一个服务进行身份验证来取代它,然后代表用户向用户的网站声明用户的身份。 您的网站信任第三方服务(OpenID提供商),因此认为用户已登录。

服务或应用程序不会对您的网站进行身份验证 - 至少通常不会。 用户授权服务或应用程序访问用户的数据。 这通常由请求服务提供商授权的应用程序完成,然后将用户发送到服务提供商,用户首先进行身份验证(以便服务提供商知道与谁通话),然后用户对该网站说“是的, [应用程序]可以[以某种受限制的方式]访问我的数据。“ 从那时起,应用程序使用授权令牌访问服务提供商站点上的用户数据。 请注意,应用程序并不认证自己,就好像它是用户一样,但是它使用另一个代码来确保服务被授权访问特定用户的数据。

因此,通过澄清这一区别,您可以完全独立地在您的网站上做出有关身份验证和授权的决定。 例如,如果您希望用户能够使用以下所有内容登录:用户名+密码,OpenID和Facebook,则可以这样做。 一个完全正交的决定是你如何授权应用程序(你可以使用许多协议,OAuth当然很受欢迎)。

OpenID专注于用户认证。 OAuth专注于应用程序授权。 但是,Facebook和Twitter等少数服务选择使用OAuth进行身份验证和授权,而不是使用OpenID进行身份验证,OAuth进行授权。

现在对于您自己的项目,我强烈建议您查看VS Gallery中提供的ASP.NET MVC 2 OpenID网站(C#)项目模板。 它带有OpenID身份验证和OAuth服务提供程序支持。 这意味着您的用户可以使用OpenID登录,第三方应用程序和服务可以使用OAuth对您的网站进行API调用并访问用户数据。

听起来你想添加到这个项目模板,一旦你开始了,你的用户可以使用用户名+密码以及OpenID登录。 另外,如果你希望Facebook和Twitter成为你的用户的选择,你也必须实现它,因为它们不使用OpenID标准。 但DotNetOpenAuth下载包括用Twitter和Facebook登录的示例,因此您可以在此获得一些指导。

我怀疑在授权方面你没有太多的事情要做。 正如我之前所说的那样,它带有OAuth,这对你来说可能就足够了。


首先。 您需要从心理上分离您的API - 认证方法。

你的API基本上是资源,以及操纵这些资源的方法。 您可以使用多种方法验证对您的API的访问权限。

OAuth就是这样一种认证机制。 作为一个OAuth提供商是非常棒的,尽管规范有点难以掌握,特别是与签名有关的部分。 一旦有了OAuth,客户端应用程序通常就可以轻松进行身份验证,因为在大多数语言中有许多“开源,已经完成,只是实现”的库。

OAuth的利弊已经有一段时间了。 但为了形成你自己的观点,我建议阅读由Euth Hammer-Lahav撰写的权威指南,这是负责OAuth规范的人员之一。

就我所见,OAuth的唯一真正替代品是OAuth 2.0,而且只是简单的基本身份验证。

除此之外,您正在谈论使用Open-ID或Facebook身份验证等。这是您需要自问的另一个问题。 但它确实超出了API和OAuth的范围。 对我而言,感觉更像是服务中用户创建的问题。 我可能是错的。

链接地址: http://www.djcxy.com/p/22267.html

上一篇: Securing my REST API with OAuth while still allowing authentication via third party OAuth providers (using DotNetOpenAuth)

下一篇: WCF authorization from website client