身份验证:自定义或第三方

时间:2016-01-27 08:17:15

标签: ruby-on-rails ruby devise omniauth

我正在Ruby on Rails中创建一个应用程序,并研究Devise,Omniauth,并创建我自己的自定义版本。

我的问题是:您使用上述三种选择之一的场景是什么?

我的看法: - Omniauth可以通过第三方API提供快速注册,但需要其他权限才能访问其他数据 - Devise提供核心功能,也可根据应用需求进行定制 - 自定义可能适用于目前我不需要的极端情况

**我倾向于Devise,因为它提供了核心,并允许我添加到

其他注意事项: - 我的应用程序需要登录并访问基本信息:位置,语言I18n等 - 我的申请也进行金融交易(如果您是付费会员等)。

回到我的问题:基于以上所述,Devise似乎是更好的选择吗? Omniauth是否提供这些功能?我应该何时使用其中一种?

由于

2 个答案:

答案 0 :(得分:2)

Devise和Omniauth做了很多不同的事情 - 它们经常被一起使用。

设计提供包含视图,控制器和路由的完整身份验证包,以允许用户注册,编辑用户配置文件,重置密码等。 可以在没有数据库身份验证模块的情况下使用Devise,通过电子邮件密码提供注册。

Omniauth 是通过Oauth验证用户的框架。与Devise不同的Omniauth不附带任何视图或控制器。相反,您需要将Oauth回调集成到您的应用中。 Omniauth所做的是抽象出不同提供商之间的差异。

例如,两者可以一起用于通过密码或oauth提供用户身份验证。

滚动您自己的身份验证解决方案通常是不可取的。像Devise这样的项目有数百甚至数千个工时,而且许多人都在查看代码库中的缺陷。具有 Not Invented Here Syndrom 的公司的Crappy home的auth解决方案是导致用户数据和密码泄露的最常见安全故障之一。

答案 1 :(得分:1)

要向@max的答案添加上下文,OmniAuth是对OAuth (Open Authorization)的提取......

  

OAuth是一种发布受保护数据并与之互动的简单方法。对于人们来说,这也是一种更安全,更安全的方式。我们一直保持简单,以节省您的时间。

每当您拥有受信任的服务时,例如FacebookTwitterLinkedInGitHubNetFlix等,并希望将服务结合使用与这些现有服务上的预建连接,您需要一种安全的方式来“授权”使用该数据......

  • “CRM”系统,允许您从LinkedIn
  • “导入”联系人
  • “社交发件人”系统,可让您向Facebook朋友发送讯息
  • 根据您最近在NetFlix
  • 上观看的内容推荐新电影

根据OAuth等的“允许访问”通知,大多数人都知道Facebook

enter image description here

在您自己的应用中解释这一点很简单 - 您想从Facebook / Twitter / LinkedIn / GitHub等处提取数据吗?

真实使用OAuth应该 扩展 您的应用程序。

enter image description here

大多数用户将“应用请求”视为其社交网络数据,作为“社交”体验的延伸(IE,如果我允许app访问我的FB,我希望它发布到我的墙等)。

不应将其视为允许用户使用Twitter / Facebook / LinkedIn凭据(100%有效)登录的方式,而应考虑更高 - 等级功能。

-

设计!= OmniAuth

Devise是一个身份验证系统; OAuth是授权

OmniAuth扩展OAuth进行身份验证:

  

OmniAuth是一个标准化Web应用程序的多提供程序身份验证的库。

它将email / password替换为Twitter API key。因此,无论何时在您的系统上创建身份验证,您始终需要存储User数据等 - 这些 数据经过身份验证后会产生差异。

简而言之,如果您需要Sign in with Twitter按钮等,建议使用OmniAuth 。但是,要保持身份验证的一致性,you'll be best using Devise with OmniAuth

-

最后,不要滚动自己的身份验证,除非您已经实施Devise至少5次。所有Rails身份验证的工作方式类似(使用Warden strategies)。当Devise有100,000名用户为您完成工作时,调整您自己的系统是不值得的。