我有3个网络应用程序 - A,B和C.应用程序A包含用户数据库。如果访问App B和App C,我希望将用户重定向到App A进行身份验证,然后返回到他们尝试访问的任何应用程序。同时,他们应该登录到所有应用程序。除非有人有更好的解决方案,否则我已经使用了this blog post中描述的OmniAuth / Devise组合解决方案。
我已经分发并更新到Rais 3.1.2示例应用程序A和示例应用程序B / C.
应用A - 提供商 - https://github.com/RobZolkos/sso-devise-omniauth-provider
应用程序B / C - 客户端 - https://github.com/RobZolkos/sso-devise-omniauth-client
这些示例应用程序正常运行,我将被重定向到提供程序应用程序进行身份验证,但它似乎无法进行身份验证。我附上了日志here。提供商似乎经历了这些动作,但是在日志的第26行,您可以看到似乎存在身份验证问题。
我是否遗漏了使这些示例应用程序有效的简单方法?
答案 0 :(得分:2)
我发现了两个问题:
access_token
更改为oauth_token
。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存储库中找到完全可行的代码:
答案 1 :(得分:1)
我没有在rails中使用oauth的经验,但我将解释我用Java创建自己的提供程序的流程。在轨道上应用它应该很容易。如果您将Devise与omniauth一起使用,则需要了解它们如何提供OAuth支持以及版本。
consumer_key
和consumer_secret
。这是通过常规表单完成的,通常是在开发人员帐户上。(可选)提供商批准创建的帐户
所有OAuth请求都取决于请求中的正确OAuth标头。正确的标题意味着:
oauth的合适资源是official site。 对于3脚的示例,您可以访问google oauth playground