在服务器上触发客户端请求

时间:2010-01-17 23:31:40

标签: authentication openid server-side

我以为我理解Open ID是如何工作的,但现在我很困惑......

仅供参考,我不是要了解如何使用Open ID作为开发人员,而是尝试通过客户端浏览器进行身份验证的实际操作。

据我了解,用户(例如)选择Google作为其开放ID提供商。然后,服务器请求由Open ID第三方提供的预定URL。此请求通过客户端的浏览器发送,响应将返回给服务器。如果响应等于“登录”,则用户不知道他的浏览器上的任何活动,除了访问主站点上的“欢迎回来”页面。如果响应等于“没有人登录”,浏览器将打开一个新窗口,其中包含第三方的登录屏幕。

那么Open ID登录页面如何实际将请求发送给第三方以获得响应?请求是否需要始终通过客户端脚本(即javascript / ajax)启动,还是可以将请求从服务器推送到浏览器而不需要任何javascript?

2 个答案:

答案 0 :(得分:3)

我建议你阅读the spec

简而言之(这不完全准确,但大多数流程都在那里)依赖方(又名RP:用户尝试登录的网站)构造一个包含RP想要发送的消息的URL到OpenID Provider(OP),它描述了RP本身以及它希望用户通过什么样的登录。 RP向浏览器发送301 Redirect消息,因此浏览器将被定向到RP构建的URL。浏览器会将该URL发送给OP,因此OP获取消息。 OPs对浏览器的响应将是一个HTML页面,因此用户可以使用精心设计的URL登录OP或自己的301重定向,该URL将浏览器发送回RP,并告知RP“是,此用户以 x “身份登录。

RP通过使用RP和OP之间的共享秘密验证包含在消息中的OP的签名,或者通过从RP向OP发送直接HTTP消息来验证来自OP的消息是geniune“你发了这个吗?“

请注意,此处不涉及AJAX或任何形式的脚本。

现在,在一些高级方案中,可以使用AJAX ,但在所有情况下,RP与OP和浏览器之间的整体信息流是相同的。这只是一些“重定向”是否通过Javascript在隐藏的iframe中发生的问题。如果用户未授权OP在过去自动将用户登录到此RP中,则隐藏的iframe当然会失败。

答案 1 :(得分:1)

openidenabled库实际上吐出了一个非常简单的html页面,其中包含一个带有一些javascript的表单,可以自动提交表单和重定向。当javascript未被使用时,表格将被打印出来,用户可以点击提交按钮。