Cyr*_* N. 12 openid authentication api rest
这似乎是一个广泛问的问题,在阅读了大量关于这个主题的文档后,我仍然不确定是否正确理解了所有内容(我认为愚蠢是一个可能的答案;)).
我正在尝试构建一个为用户提供服务的API.用户将通过Facebook或任何OpenId提供商连接(我将Facebook分开,因为他们实现了自己的连接系统).
(我认为这是一个很好的方法,因为我不会存储用户的密码,并且在类似的Gawker问题的情况下最终会有更少的问题.)
当客户端(Web应用程序,移动应用程序等)向API 发出请求时,必须与请求一起发送指示符,以便确定哪个用户正在使用该应用程序.这通常通过在身份验证期间定义的令牌使用.
而对于认证,我无法找到任何有价值的例子,教程,了解如何正确地实现它的解释.
我(试着)解释一下:
在我(快乐护理熊的精彩世界)中,我将项目分为不同部分:
据我所知,每当有人询问如何实现RESTful API身份验证时,会弹出三个主要答案:
因为我不会存储用户的密码,所以第一个用于我,但另外两个让我感到困惑.
但OAuth和OpenId 并不相同,一个(OpenId)代表身份验证(问题的基础),其中第二个(OAuth)代表授权!
当Twitter为其API实现OAuth时,他们没有实现身份验证系统,有一种方法可以指示用户应用程序X希望访问用户帐户(在各种访问级别).如果用户当前未登录Twitter,则他首先必须对自己进行身份验证,然后授权当前应用程序访问其数据.
所以,为了清理起来,OAuth不是一种身份验证机制,它是:
允许安全API授权的开放协议(来源:http://oauth.net/)
然后,验证用户的唯一方法是使用OpenId.然后,地狱成真了.
如果我以一个完全由html/css/js组成的Web应用程序为例,没有服务器端组件,则与API通信.
Web应用程序必须向API指示当前使用API的用户是X先生.
为此,Web应用程序会显示一个包含OpenId提供程序列表的弹出窗口,要求用户对自己进行身份验证.用户单击其中一个,重定向(或打开一个新弹出窗口)到OpenId提供程序,指示他的登录/通过,由OpenId提供程序进行身份验证,使用令牌返回成功(我简化了通信).
这很棒,网络应用现在知道用户真的是X先生.但是API仍然有任何线索!
最后,我的问题非常简单:我如何通过Web应用程序通过OpenId对x先生进行身份验证,然后,如何通过Web应用程序和api保存这是当前正在使用Web应用程序的先生X的信息当然还有API.
非常感谢您的帮助 !
- 编辑格式
(如果你不想阅读,下面的列表总结了整个想法)
一个可能的解决方案(如果我错了请告诉我)是在消费者(网络应用程序、移动应用程序等)中显示登录表单,用户单击其提供者(myopenid、google 等),打开一个弹出窗口进行登录。棘手的部分是 return_to 参数将设置为 API,而不是网站
然后,API 将重新发送 check_authentication 并获取 is_valid:true (或不)。在此步骤中,应用程序将查询 api 到特定的 url,该 url 返回身份验证的状态(正在处理、失败、成功)。在处理过程中,会向用户显示一个指示器(正在加载 gif),如果成功/失败,则会向用户显示结果。
如果 api 收到 is_valid:true,那么它将向 openid 服务器询问有关用户的信息,例如电子邮件、名字、姓氏,并将它们与用户的数据库进行比较。如果存在匹配,API 会在自身和应用程序之间创建一个会话,如果用户是新用户,则会创建一个新条目,然后创建会话。
该会话将是具有特定持续时间的唯一令牌(可能等于 openid 服务器 assoc_handle 持续时间?)
这似乎是可能的,但我不是安全专家。
为了更简单地解释事情,这里有一个小“地图”:
注意:Provider是OpenId服务器(提供有关身份验证的信息)