ruby-on-rails - 在 Rails 5.2 应用程序和 Golang 之间共享网络 session

标签 ruby-on-rails go jwt

我们有一个 Rails 应用程序作为主站点,但我们在 Golang 中创建了一个单独的应用程序来处理许多其他实时功能,例如视频和音频调用、消息传递和白板部分。

我们现在遇到的问题是我们不知道如何在两个应用程序之间共享网络 session 。当您在 Rails 应用程序和 Golang 之间切换时。就像从 Gmail 到 Google 云端硬盘再到 YouTube 一样, session 保持不变,即使这些应用程序在不同的子域中运行,有时甚至使用不同的语言。

我能够将来自 Rails + Devise/Warden 的 session 添加到浏览器 cookie 中,但 cookie 是加密的。我如何解密或使用此 cookie 来验证 Go 中的用户?

你们能否与我分享你们将如何在自己的应用中解决这个问题?

使用这个 answer我能够让 session cookie 出现在 React + Rails 的主站点和 React + Golang 的子域中,但是 cookie 是加密的,我们如何解密/获取其中的值?例如 user_id?

最佳答案

你应该试试rails5session library :

来自Readme :

使用您的 Rails session keystore 创建加密实例(指定 在 config/secrets.yml 中)

encryption := rails5session.NewEncryption(
    secretKeyBase,
    cookieSalt,
    signedCookieSalt,
)
  • 您可以通过运行以下 ruby​​ 代码来获取您的 cookieSalt:

    Rails.application.encryption.action_dispatch.encrypted_cookie_salt
    
  • 您可以通过运行以下 ruby​​ 代码来获取您的 signedCookieSalt:

    Rails.application.encryption.action_dispatch.encrypted_signed_cookie_salt
    

然后验证和解密用户的cookie,它会返回解密的 byte slice 如果有错误。

data, err := rails5session.VerifyAndDecryptCookieSession(encryption, cookie)
if err != nil {
    panic(err)
}

关于ruby-on-rails - 在 Rails 5.2 应用程序和 Golang 之间共享网络 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52656437/

相关文章:

ruby-on-rails - before_filter或rescue创建新记录

go - 如何从golang的[] interface {}中提取 slice

string - 在 Go 中测试空字符串的最佳方法是什么?

jwt - 为什么在 jwt header 中发送算法

ruby-on-rails - 一个模型可以属于多个模型吗?

mysql - 流行度公式语法错误

javascript - css/javascript 元素在应该返回 true 时返回 false

去新手 : how to run goroutines shell?

node.js - Firebase Admin SDK的Node.js身份验证服务器-JWT验证问题

kubernetes - 使用JWT的Istio原始身份验证不起作用