- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在你因为我没有做任何功课就问了太基本的问题而贬低我之前,我想说我已经阅读了大量关于这些主题的文章,但我仍然很困惑。
我的需求看起来很简单。在我的公司,我们有很多 Ruby on Rails 应用程序。我想构建一个所有这些应用程序都应该使用的 SSO 身份验证服务。
为了研究如何做到这一点,我阅读了有关 CAS
、SAML
和 OAuth2
的内容。 (我知道 OAuth 中的“Auth”代表授权,而不是身份验证,但我读了足够多的文章,说明如何使用 OAuth 进行身份验证 - this 就是其中之一。)
有人能简单地告诉我这三个是什么吗?它们是替代品(竞争)吗?比较它们是否正确?
而且有很多 gem ,它们似乎都在说非常相似的东西:
我只想要一个单独的 Rails 应用程序来处理其他 Rails 应用程序的所有身份验证。
注意:我不想允许用户使用他们的 Google/Facebook 帐户登录。我们的用户已经在我们的网站上拥有帐户。我希望他们能够使用该帐户登录一次,并且无需再次登录即可访问我们的所有应用程序。在任何应用程序中注销都会将他们从所有应用程序中注销。
更新
我遇到过这两个 OAuth 解决方案:
他们似乎描述了与我想要的非常相似的东西。但我还没有找到任何指南/博客文章/教程来展示如何使用 SAML/CAS 执行此操作。
欢迎提出建议。
更新2
有关我们用例的更多详细信息。
我们没有任何现有的 SAML 架构。主要是我们的用户(直接在我们的网站上注册)将访问我们的所有应用程序。 future ,我们可能会有第三方(合作伙伴)公司调用我们的API。我们还可能有来自这些第三方(合作伙伴)公司(在其网站上注册)的用户访问我们的应用程序。
最佳答案
CAS 服务器:
独立的中央登录页面,用户可以在其中输入其凭据(即用户名和密码)。
CAS supports the standardized SAML 1.1 protocol primarily to support attribute release to clients and single sign-out.
(SQL 数据库、ActiveDirectory/LDAP、Google 帐户等中的表)完全兼容开放的多平台CAS协议(protocol)(CAS客户端实现了多种平台,包括PHP、各种Java框架、.NET、Zope等)多语言本地化——RubyCAS-Server自动检测用户的首选语言并呈现适当的界面。
SAML:安全断言标记语言是一种基于 XML 的开放标准数据格式,用于在各方之间(特别是身份提供商和服务提供商之间)交换身份验证和授权数据。SAML 授权是一个两步过程,您应该实现对这两个步骤的支持。
OAuth 2.0:
OAuth 2.0 授权框架支持第三方 应用程序获取对 HTTP
服务的有限访问,无论是 通过编排审批交互来代表资源所有者 资源所有者和 HTTP 服务之间,或者通过允许 第三方应用程序代表自己获取访问权限。
重要说明:
SAML 具有 OAuth2 缺少的一项功能:SAML token 包含用户身份信息(由于签名)。使用 OAuth2,您无法立即使用它,相反,资源服务器需要进行额外的往返以通过授权服务器验证 token 。
另一方面,使用OAuth2,您可以使授权服务器上的访问 token 失效,并禁止其进一步访问资源服务器。
这两种方法都有很好的功能,并且都适用于 SSO。我们已经用多种语言和各种应用程序证明了这两个概念。归根结底,OAuth2 似乎更适合我们的需求(因为没有现有的 SAML 基础设施可供利用)。
OAuth2 provides a simpler and more standardized solution which covers all of our current needs and avoids the use of workarounds for interoperability with native applications.
什么时候应该使用哪个?
1.如果您的用例涉及 SSO(当至少一个参与者或参与者是企业时),则使用 SAML。
2.如果您的用例涉及提供对资源(例如帐户、图片、文件等)的访问(临时或永久),则使用OAuth。
3.如果您需要向合作伙伴或客户应用程序提供对您门户的访问权限,请使用SAML。
4.如果您的用例需要集中式身份源,请使用SAML(身份提供商)。
5.如果您的用例涉及移动设备,则使用某种形式的不记名 token 的 OAuth2 是合适的。
<强> Reference 1 , Reference 2 , Reference 3
关于ruby-on-rails - CAS、SAML 与 OAuth2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29053277/
以下是一个非常简单的ruby服务器。 require 'socket' local_socket = Socket.new(:INET, :STREAM) local_addr = Socket.
我正在使用 OS X(使用 bash),并且是 unix 的新手。我想知道是否可以修改一些文件以便运行 ruby 程序,我不需要“ruby file.rb”,而是可以运行“ruby.rb”。 有理
我在用 Ruby 替换字符串时遇到一些问题。 我的原文:人之所为不如兽之所为。 我想替换为:==What== human does is not like ==what== animal does.
我想在一个循环中从 Ruby 脚本做这样的事情: 写一个文件a.rb(每次迭代都会改变) 执行系统(ruby 'a.rb') a.rb 将带有结果的字符串写入文件“results” a.rb 完成并且
我的问题是尝试创建一个本地服务器,以便我可以理解由我的新团队开发的应用程序。我的问题是我使用的是 Ruby 2.3.3,而 Gemfile 需要 2.3.1。我无法编辑 Gemfile,因为我被告知很
我有一个使用 GLI 框架用 Ruby 编写的命令行实用程序。我想在我的主目录中配置我的命令行实用程序,使用 Ruby 本身作为 DSL 来处理它(类似于 Gemfile 或 Rakefile)。 我
我的 Rails 应用 Controller 中有这段代码: def delete object = model.datamapper_class.first(:sourced_id =>
我正在寻找的解析器应该: 对 Ruby 解析友好, 规则设计优雅, 产生用户友好的解析错误, 用户文档的数量应该比计算器示例多, UPD:允许在编写语法时省略可选的空格。 快速解析不是一个重要的特性。
我刚开始使用 Ruby,听说有一种“Ruby 方式”编码。除了 Ruby on Rails 之外,还有哪些项目适合学习并被认可且设计良好? 最佳答案 Prawn被明确地创建为不仅是一个该死的好 PDF
我知道之前有人问过类似的问题,但是我该如何构建一个无需在前面输入“ruby”就可以在终端中运行的 Ruby 文件呢? 这里的最终目标是创建一个命令行工具包类型的东西。现在,为了执行我希望用户能够执行的
例如哈希a是{:name=>'mike',:age=>27,:gender=>'male'}哈希 b 是 {:name=>'mike'} 我想知道是否有更好的方法来判断 b 哈希是否在 a 哈希内,而
我是一名决定学习 Ruby 和 Ruby on Rails 的 ASP.NET MVC 开发人员。我已经有所了解并在 RoR 上创建了一个网站。在 ASP.NET MVC 上开发,我一直使用三层架构:
最近我看到 Gary Bernhardt 展示了他用来在 vim 中执行 Ruby 代码的 vim 快捷方式。捷径是 :map ,t :w\|:!ruby %. 似乎这个方法总是执行系统 Rub
在为 this question about Blue Ruby 选择的答案中,查克说: All of the current Ruby implementations are compiled to
我有一个 Ruby 数组 > list = Request.find_all_by_artist("Metallica").map(&:song) => ["Nothing else Matters"
我在四舍五入时遇到问题。我有一个 float ,我想将其四舍五入到小数点后的百分之一。但是,我只能使用 .round ,它基本上将它变成一个 int,意思是 2.34.round # => 2. 有没
我使用 ruby on rails 编写了一个小型 Web 应用程序,它的主要目的是上传、存储和显示来自 xml(文件最多几 MB)文件的结果。运行大约 2 个月后,我注意到 mongrel 进程
我们如何用 Ruby 转换像这样的字符串: 𝑙𝑎𝑡𝑜𝑟𝑟𝑒 收件人: Latorre 最佳答案 s = "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" => "𝑙𝑎𝑡𝑜𝑟𝑟𝑒" s.u
通过 ruby monk 时,他们偶尔会从左侧字段中抛出一段语法不熟悉的代码: def compute(xyz) return nil unless xyz xyz.map {|a,
不确定我做错了什么,但我似乎弄错了。 问题是,给你一串空格分隔的数字,你必须返回最大和最小的数字。 注意:所有数字都是有效的 Int32,不需要验证它们。输入字符串中始终至少有一个数字。输出字符串必须
我是一名优秀的程序员,十分优秀!