Ruby on rails OmniAuth使用Desive单点登录,凭据无效
我有3个web应用程序-A、B和C。应用程序A包含用户数据库。如果访问应用程序B和应用程序C,我希望用户被重定向到应用程序A进行身份验证,然后返回到他们尝试访问的任何应用程序。同时,他们应该登录到所有应用程序。除非有人有更好的解决方案,否则我会选择OmniAuth/Desive组合解决方案,如中所述 我已分叉并更新为Rais 3.1.2示例应用程序a和示例应用程序B/C 应用程序A-提供商- 应用程序B/C-客户端- 这些示例应用程序工作正常,我被重定向到提供商应用程序进行身份验证,但它似乎没有进行身份验证。我已附上日志。提供者似乎经历了一些动作,但在日志的第26行,您可以看到似乎存在身份验证问题Ruby on rails OmniAuth使用Desive单点登录,凭据无效,ruby-on-rails,authentication,ruby-on-rails-3.1,omniauth,oauth-2.0,Ruby On Rails,Authentication,Ruby On Rails 3.1,Omniauth,Oauth 2.0,我有3个web应用程序-A、B和C。应用程序A包含用户数据库。如果访问应用程序B和应用程序C,我希望用户被重定向到应用程序A进行身份验证,然后返回到他们尝试访问的任何应用程序。同时,他们应该登录到所有应用程序。除非有人有更好的解决方案,否则我会选择OmniAuth/Desive组合解决方案,如中所述 我已分叉并更新为Rais 3.1.2示例应用程序a和示例应用程序B/C 应用程序A-提供商- 应用程序B/C-客户端- 这些示例应用程序工作正常,我被重定向到提供商应用程序进行身份验证,但它似乎没有
我是否缺少一些简单的方法来让这些示例应用程序正常工作?我没有使用rails中的oauth的经验,但我将解释我使用Java创建自己的提供者的流程。在rails中应用这一点应该很容易。如果将Desive与omniauth一起使用,则需要了解它们是如何提供OAuth支持的,以及是哪个版本 基础
- 消费者登录应用程序,并获得
和消费者密钥
。这是通过常规表单完成的,通常是开发人员帐户消费者密钥
- (可选)提供程序批准创建的帐户
- 所有OAuth请求都依赖于请求中正确的OAuth头。适当的标题意味着:
- 所有oauth属性及其值都已按字母顺序排序
- 提供针对特定消费者请求的所有有效密钥/令牌
- 使用所有相关机密签署请求。提供者和使用者都知道秘密,但不包括在标题中李>
- 提供者生成相同的签名。如果是,则请求有效。nonce可用于防止重播攻击李>
对于你可以在上看到的三条腿的例子,我发现了两个问题:
access\u token
更改为oauth\u token
oauth_令牌的方法。先前的0.3.0令牌已通过请求参数oauth_令牌传递,但从0.3.0开始,它将通过HTTP_授权头传递
def原始信息
@raw_info | |=access_token.get(“/auth/josh_id/user.json?oauth_token={access_token.token}”)。已解析
结束
您可以在我们的github repos中找到完全可行的代码:
warden.session
输出到日志(在提供者应用程序中),我会得到一个warden::NotAuthenticated
异常。也就是说,authenticate\u用户
before筛选器返回false,这就是它不起作用的原因。我强烈建议您使用此修补程序