Openid和RestFul API

时间:2017-05-03 19:06:32

标签: rest api openid steam

我的网站有一个Restful API,需要进行身份验证。当用户登录网站时,它会执行HTTP基本身份验证(用户名和密码),并返回在API中生成的访问令牌。

但是最近我实施了Steam登录(是的,steam可以充当OpenID提供商)。一切都还可以,但如果没有密码发送,如何在API上授权用户。

2 个答案:

答案 0 :(得分:2)

您不需要用户名和/或密码来验证使用OpenId提供商登录您网站的用户(在您的情况下为Steam)。您需要在此OpenId提供程序中信任

这是John Christopher Jones在博客文章中对OpenId的非常好的定义:

  

OpenID 是一种身份验证策略,其中包含未经身份验证的用户   访问您的网站,然后通过登录进行身份验证   Google,Twitter,Facebook,Steam或其他一些 OpenID提供商。您的   服务器( OpenID依赖方)与 OpenID 交换密钥   提供商(Google等人)然后将用户发送到 OpenID   提供商登录。

     

用户使用 OpenID提供商登录后,将用户退回   向您提供一些信息,以确定他们是谁,由他们签名   您与 OpenID提供商交换的密钥。 您可以信任他们的   此时身份并开始“登录”到您自己的系统   基于他们的身份

下图显示了OpenId Flow:

OpenId Flow

如您所见,在验证凭据后,OpenId Provider(Steam)会将用户发回给您的网站,包括URL中的凭据。掌握这些凭据您需要做的是:

  1. 验证与此凭据关联的用户是否已存在 数据库。如果没有,请创建它。
  2. 创建与此用户关联的API令牌。
  3. 为在浏览器上等待的用户(使用您的RESTful API的客户端应用程序)发送API令牌。
  4. 手中有这个API令牌,您的客户端应用程序可以将这些令牌添加到RESTful API的每个请求中,就像使用用户名和密码的经过身份验证的用户所做的那样。请注意,您的令牌生成策略不能取决于用户名和密码。

答案 1 :(得分:2)

所以基本上你想确保用户通过身份验证。 Steam为您的服务器提供密钥(OpenID服务器),并且您的服务器已为OpenID服务器提供密钥。这与用于防伪攻击的令牌非常相似。 Steam为您的服务器提供用户的身份,并且您的服务器记下Steam服务器的位置。然后,用户可以查看服务器的内容。 Steam确实使用了API,因此如果凭据在浏览器中缓存得很好,它将来不会要求它们。

注意:HTTP是无状态的,因此您必须使用会话来确保用户仍然登录。