1

我必须将我正在开发的 Web 应用程序与外部 Web 应用程序集成才能使用他们的服务。不幸的是,这是我的第一部作品,我有点困惑。

他们要求我提供带有登录令牌的验证 URL,以帮助他们识别哪些用户来自我的网站。

  1. 我的应用程序中的用户希望从 3party 应用程序数据库中获取信息
  2. 为此,3party 应用程序需要知道他们是谁,因为应用程序中有不同的角色。他们每个人在 3party 应用程序上都将拥有不同的权限
  3. 登录 3party 应用程序必须在我的应用程序中。他们只想要一个带有登录令牌的验证 URL。

是否可以通过设计使用令牌身份验证来做到这一点?我可以生成一个令牌,将其存储在客户端浏览器中,然后使用它在外部域中对其进行身份验证吗?

4

1 回答 1

5

我希望这个答案不是太明显。听起来你才刚刚开始,需要一些指导。

根据我的阅读,我得到以下要求:

  1. 您需要能够成为另一个应用程序的身份验证机构
  2. 第 3 方应用程序希望通过身份验证令牌交换和验证凭据
  3. 第 3 方应用程序希望 API 调用的 URL 从您的应用程序中执行此操作

我将在广义上对此进行介绍,并让您搜索特定的解决方案。基本上,您需要一种生成安全身份验证令牌的方法。设计应该这样做,连同authlogic其他几个。您不想做的是尝试滚动您自己的身份验证令牌生成。绝对使用那里的宝石为您做到这一点。

一旦生成了令牌,下面是基本事务的概述,其中身份验证令牌只是作为参数传递给控制器​​操作(https 是您在此事务中的朋友,仅供参考)。

在此处输入图像描述

  1. 3rd 方应用程序使用您的应用程序提供的令牌进行 API 调用
  2. 如果身份验证成功,您的应用会检查身份验证令牌的有效性,并采取任何请求的操作
  3. 如果身份验证成功,您的应用会使用身份验证成功/失败代码以及第三方应用请求的任何其他响应数据进行响应

令牌如何传递给第 3 方应用程序,以便它可以使用它来发出 API 请求,这取决于您希望您的应用程序如何工作。但是,一种常见的做法是使用遵循以下模式的方法:

  1. 当第 3 方应用程序需要代表用户发出 API 请求时,第 3 方应用程序将重定向到您的应用程序,用户在其中输入其凭据(如果他们尚未输入凭据)。这样,第 3 方应用程序永远不会直接获取用户的用户名+密码。
  2. 假设身份验证成功,您的应用程序将重定向回您的回调 URL,将您的应用程序生成的身份验证令牌作为参数传入。该身份验证令牌将在未来的 API 调用中使用,直到并且除非身份验证令牌过期(当然,因为您是身份验证机构,所以它们何时到期取决于您)。

如果可能的话,如果您实际上可以使用 OAuth 提供程序或其他一些已经存在的机制来充当 3rd 方身份验证意味着您的应用程序和 3rd 方应用程序都信任,那就太好了。要走这条路,请查看此 Railscast:http ://railscasts.com/episodes/235-omniauth-part-1

...但是当然,由于您已经拥有一个现有的应用程序,尤其是在企业应用程序中,因此能够将 oauth 提供程序集成到您的应用程序中的情况不太常见。但无论哪种方式,只要有可能,几乎总是最好将身份验证机制卸载给另一方。这主要是因为您希望安全专家担心并更新他们的身份验证服务,并将应用程序代码留给您。

另一方面,即使您不使用 OAuth 提供程序来解决此问题,上面提到的 railscast 也会为您提供构建自己的 API/回调机制时要遵循的想法和模式。您最终会得到一系列 API 调用/操作。路由(这些 API 调用的 URL)当然可以是任何东西。但作为一个例子,它们可能看起来像这样:

/api/auth/:id                     {:controller=>"api", :action=>"auth"}

...作为参数,标识第 3 方应用程序的唯一密钥,以及第 3 方应用程序的密钥(本质上是密码),以及成功和失败的回调 url,并以成功/失败响应,以及成功后的有效身份验证令牌。

/api/some/restful/resource/call   # example API call for some RESTful resource you make available
... etc. ...

就像我说的那样,即使您不使用 3rd 方身份验证提供程序,按照我发布的 railscast(以及后续剧集),您也可以了解其他强大的 API 使用的实现模式。设置一个演示应用程序来进行 facebook 身份验证也非常有指导意义,并且可能只需要你几个小时,只是为了掌握工作流程。

于 2012-03-27T16:33:00.853 回答