dav*_*rac 14 javascript ajax oauth-2.0 ruby-on-rails-3
我想创建一个Web小部件,它将显示来自我的网站的信息.
该小部件将使用JavaScript包含在客户端的网站HTML中,并且只能用于我的客户端 - 在我的网站上注册的网站.
窗口小部件中的信息应特定于当前访问客户端站点的用户.
因此,我需要对客户端(网站所有者)和资源所有者(网站访问者)进行身份验证.这似乎很好地映射到OAuth 2.0,但我找不到这样一个实现的完整示例或解释.
任何资源或指向此类信息的指针将不胜感激.
更新:我偶然发现了这篇文章,该文章提供了使用OAuth的方法的大纲.但是,对于我真正了解如何在OAuth 2中使用它并不够详细.
有许多大型组织已经做到了这一点,我很难过看到这个问题没有其他答案,因为它是如此重要的网络模式.
我打算假设你没有从头开始自己的OAuth 2.0提供商,如果你是 - 做得好,否则你应该使用像Doorkeeper这样的东西来为你做这件事.
现在,在OAuth 2.0中,您有以下实体:
首先要注意的是,您必须拥有与每个应用程序关联的域名.因此,如果开发人员在您的网站上注册API令牌/机密,则他创建的应用程序将映射到唯一的域.
现在,我假设应用程序通过您的网站验证用户的流程已经很清楚了.话虽这么说,你不需要做太多工作.
当应用程序将用户发送到您的网站时(为了登录),您可以在用户的计算机上放置会话cookie.让我们称之为"Cookie-X".
现在,用户已通过您的网站进行身份验证并返回到应用程序.我们希望显示一个自定义窗口小部件,其中包含与该用户相关的信息.
开发人员需要将一些代码粘贴到此应用程序中.
流程是这样的:
该代码将包含您的网站的网址及其在您的网站上注册其应用程序时获得的应用程序ID(非秘密).
当该代码运行时,它将使用他的appId ping您的网站.您需要使用您的数据库检查该AppID,并另外检查引用URL是否与您的网站中为该AppID注册的域相同.编辑:或者或另外,代码可以检查document.domain并将其包含在ping到您的网站,允许您验证请求是否来自已使用给定AppID注册的域.
如果这是正确的,你回复一些JS代码.
您的JS代码会查找您的网站在用户登录时设置的会话Cookie.如果找到该cookie,它会通过会话回复您的网站,并且您的网站会使用自定义视图内容进行响应.
编辑:正如在评论中正确提到的,cookie应该是HttpOnly以防止常见的XSS攻击.
补充说明
这是一个安全方法的原因:
AppId和域名是一个足够好的组合,以验证其他人没有获取此信息.即使appId在应用程序html源中可见,域名也必须被试图使用其他人的AppID的任何人欺骗.
假设有人拿了一个不是他的AppID,并在请求你的小部件时编写代码来欺骗引用者的域名,他仍然无法看到任何信息.由于您显示的是用户特定信息,因此只有当您的网站可以找到放置在用户浏览器上的会话cookie时才会呈现窗口小部件,而这些会话cookie实际上不会被欺骗.有类似会话劫持的方法等等.但我认为这超出了这个问题的范围.
其他方法 只需查看Facebook的社交插件,就可以看出还有其他选择.
例如,一个可能是使用Iframe.如果您要求开发人员将Iframe添加到他的应用程序中,您甚至可以减少上面提到的一些步骤.但你必须添加JS(在iframe之外)以获取正确的域名等等.从可访问性和界面的角度来看,我找不到iframe.