我必须将我正在开发的Web应用程序与外部Web应用程序集成以便使用他们的服务。 不幸的是,这是我的第一份工作,我有点困惑。
他们要求我提供带有登录令牌的验证网址,以帮助他们识别哪些用户来自我的网站。
是否可以通过设计使用令牌身份验证来执行此操作? 我是否可以生成令牌,将其存储在客户端浏览器中,然后使用它来在外部域中对其进行身份验证?
答案 0 :(得分:3)
我希望这个答案不太明显。听起来你刚开始就需要一些指导。
根据我的阅读,我得到以下要求:
我将从广义上涵盖这一点,让您搜索出具体的解决方案。基本上,您需要一种方法来生成安全的身份验证令牌。设计应该与authlogic和several others一起执行此操作。您不想做的是尝试滚动自己的身份验证令牌生成。绝对使用那里的宝石为你做这件事。
一旦你生成了令牌,这里是基本交易的概述,其中auth令牌只是作为参数传递给控制器动作(https是你在这个交易中的朋友,FYI)。
如何将令牌传递给第三方应用程序,以便它可以使用它来发出API请求,这取决于您希望应用程序如何工作。但是,通常的做法是使用一种方法,它遵循以下模式:
如果可能的话,如果您实际上可以使用OAuth提供程序或其他已经存在的机制充当第三方身份验证意味着您的应用程序和第三方应用程序都信任,那就太棒了。要沿着这条路走下去,看看这个Railscast:http://railscasts.com/episodes/235-omniauth-part-1
...但当然,由于您已经拥有现有的应用程序,特别是在企业应用程序中,因此将oauth提供程序集成到您的应用程序中的情况并不常见。但无论哪种方式,只要有可能,将身份验证机制卸载到另一方几乎总是更可取。这主要是因为您希望安全专家担心并更新其身份验证服务,并将应用程序代码留给您。
另一方面,即使您不使用OAuth提供程序作为解决此问题的方法,上面提到的railscast也会为您提供构建自己的API /回调机制时的想法和模式。您将了解一系列API调用/操作。当然,路由(这些API调用的URL)可以是任何东西。但作为一个例子,他们可能看起来像这样:
/api/auth/:id {:controller=>"api", :action=>"auth"}
...作为参数,标识第三方应用程序的唯一键,以及第三方应用程序的密钥(本质上是密码),以及成功和失败的回调URL,并成功响应/失败,成功时有效的身份验证令牌。
/api/some/restful/resource/call # example API call for some RESTful resource you make available
... etc. ...
就像我说的那样,即使你没有使用第三方认证提供商,我发布的railscast(以及后续剧集)也会让你了解其他强大的API的实现模式。使用。设置一个演示应用程序进行Facebook身份验证也非常有启发性,可能只需要几个小时,只是为了处理工作流程。