gpt4 book ai didi

ruby-on-rails - 跨应用程序/服务器的 Rails 身份验证

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:36 26 4
gpt4 key购买 nike

我一直在开发我的 Rails 应用程序,同时尽可能保持它们模块化。我正在尝试将下面的不同部分实现为服务。

举个Facebook的例子:
a) MainApp 允许用户拥有墙、帖子等。
b) 存储照片的 PhotoApp,允许用户查看他的照片等。这是一个独立的应用程序,将有一个 REST API,MainApp 也可以使用它。

我正在考虑使用 OAuth 作为单点登录解决方案(如本教程中的 http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/ ),其中每个应用程序都将通过 OAuth 获得授权,并将根据 cookie 访问当前用户 session 。

第一个问题:这是一个可行的解决方案吗?

第二个问题:我希望能够从 MainApp 服务器调用 PhotoApp API(不是来自用户的浏览器)。在这种情况下身份验证将如何工作?

第三个​​问题:如果说我有一个使用 node.js 的服务,这将如何工作?

最佳答案

是的,使用 OAuth 的 SSO 是一种可行的解决方案,但它并不是最简单的解决方案。在 build 任何新东西时,OAuth 2.0是要走的路。 OAuth 标准涵盖了很多领域。

OAuth 的主要优点是它允许用户授予第三方应用访问其帐户的权限,而无需向第三方透露其密码。如果您没有认真地提供这种互操作性,那么 OAuth 可能就有点矫枉过正了。

鉴于复杂性,我提供了一对不同的解决方案:

单点登录

诀窍是在域内的主机之间共享 session ID cookie 并使用共享 session 存储(如 ActiveRecordStore 或基于缓存的存储。)

每个 Rails 应用程序都有一个用于签署 cookie 的“ secret ”。在较新的 Rails 应用程序中,它位于 /config/initializers/secret_token.rb 中。在每个应用程序中设置相同的 secret token 。

然后,配置 session 以允许从所有子域访问:

AppName::Application.config.session_store :active_record_store, :key => '_app_name_session', :domain => :all

用于内部 API 调用

使用良好的共享 key 通过 HTTPS 连接进行身份验证。在“授权” header 值中传递 secret 。

您可以轻松地将共享 key 用于其他架构(如 node.js)。只需确保始终使用 HTTPS,否则共享 secret 可能会在网络上被嗅探。

关于ruby-on-rails - 跨应用程序/服务器的 Rails 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10215831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com