Rails:通过不同的域进行身份验证

时间:2012-03-27 14:59:37

标签: ruby-on-rails authentication devise multiple-domains

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

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

  1. 我的应用中的用户想要从3方应用数据库中获取信息
  2. 要做到这一点,3方应用程序需要知道他们是谁,因为在应用程序中有不同的角色。他们每个人都会在3方应用程序上拥有不同的权限
  3. 登录3方应用必须在我的应用中。他们只想要一个带登录令牌的验证网址。
  4. 是否可以通过设计使用令牌身份验证来执行此操作? 我是否可以生成令牌,将其存储在客户端浏览器中,然后使用它来在外部域中对其进行身份验证?

1 个答案:

答案 0 :(得分:3)

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

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

  1. 您需要能够成为其他应用的身份验证权限
  2. 第三方应用想要通过身份验证令牌交换和验证凭据
  3. 第三方应用希望API调用的网址从您的应用
  4. 执行此操作

    我将从广义上涵盖这一点,让您搜索出具体的解决方案。基本上,您需要一种方法来生成安全的身份验证令牌。设计应该与authlogicseveral others一起执行此操作。您不想做的是尝试滚动自己的身份验证令牌生成。绝对使用那里的宝石为你做这件事。

    一旦你生成了令牌,这里是基本交易的概述,其中auth令牌只是作为参数传递给控制器​​动作(https是你在这个交易中的朋友,FYI)。

    enter image description here

    1. 第三方应用使用您应用提供的令牌进行API调用
    2. 您的应用会检查身份验证令牌的有效性,如果身份验证成功,则会采取所请求的操作
    3. 如果身份验证成功,您的应用会使用身份验证成功/失败代码以及第三方应用请求的任何其他响应数据进行响应
    4. 如何将令牌传递给第三方应用程序,以便它可以使用它来发出API请求,这取决于您希望应用程序如何工作。但是,通常的做法是使用一种方法,它遵循以下模式:

      1. 当第三方应用需要代表用户发出API请求时,第三方应用会重定向到用户输入凭据的应用(如果尚未提供)。这样,第三方应用程序永远不会直接获取用户的用户名+密码。
      2. 假设验证成功,您的应用会重定向回您的回调网址,并将您的应用生成的验证令牌作为参数传入。 该身份验证令牌是未来API调用中使用的内容,除非身份验证令牌过期(当它们过期时由您决定,因为您是身份验证机构)。
      3. 如果可能的话,如果您实际上可以使用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身份验证也非常有启发性,可能只需要几个小时,只是为了处理工作流程。