使用 Devise 进行 OmniAuth 单点登录,invalid_credentials

2023-12-05

我有 3 个 Web 应用程序 - A、B 和 C。应用程序 A 包含用户数据库。如果访问应用程序 B 和应用程序 C,我希望用户被重定向到应用程序 A 进行身份验证,然后返回到他们尝试访问的任何应用程序。同时,他们应该登录所有应用程序。除非有人有更好的解决方案,否则我会使用 OmniAuth/Devise 组合解决方案,如中所述这篇博文.

我已经将示例应用程序 A 和示例应用程序 B/C 分叉并更新到 Rais 3.1.2。

应用程序 A - 提供商 -https://github.com/RobZolkos/sso-devise-omniauth-provider

应用程序 B/C - 客户端 -https://github.com/RobZolkos/sso-devise-omniauth-client

这些示例应用程序可以工作,我被重定向到提供商应用程序进行身份验证,但它似乎没有进行身份验证。我已附上日志here。提供商似乎只是走走过场,但在日志的第 26 行,您可以看到似乎存在身份验证问题。

我是否缺少一些简单的东西来使这些示例应用程序正常工作?


我发现了两个问题:

  1. 从 0.2.1 版本开始,omniauth 已将 auth 参数名称从access_token to oauth_token获取访问权限时(POST /oauth/token 请求)。
  2. 从0.3.0版本开始omniauth改变了传递方法oauth_token在身份验证请求中(GET /auth/josh_id/user.json)。之前的 0.3.0 令牌已通过请求参数 oauth_token 传递,但从 0.3.0 开始,它变为通过 HTTP_AUTHORIZATION 标头传递。

我不知道如何很好地从标头获取令牌(我认为它可以通过设计获取),所以我丑陋的黑客客户端通过这样的 GET 参数发送 oauth_token (在 lib/josh_id.rb 中):

def raw_info
  @raw_info ||= access_token.get("/auth/josh_id/user.json?oauth_token=#{access_token.token}").parsed
end

您可以在我们的 github 存储库中找到完全可行的代码:

  • https://github.com/openteam/sso-devise-omniauth-client
  • https://github.com/openteam/sso-devise-omniauth-provider
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Devise 进行 OmniAuth 单点登录,invalid_credentials 的相关文章

随机推荐