RESTAPI登录模式
我正在创建一个restapi,严格遵循apigee的建议,使用名词而不是动词,将api版本烘焙到url中,每个集合有两个api路径,GET-POST-PUT-DELETE用法,等等 我正在开发登录系统,但不确定登录用户的正确休息方式。我现在不是在研究安全性,只是在研究登录模式或流程。(稍后我们将添加2步oAuth,以及HMAC等) 可能的选择RESTAPI登录模式,rest,design-patterns,restapi,Rest,Design Patterns,Restapi,我正在创建一个restapi,严格遵循apigee的建议,使用名词而不是动词,将api版本烘焙到url中,每个集合有两个api路径,GET-POST-PUT-DELETE用法,等等 我正在开发登录系统,但不确定登录用户的正确休息方式。我现在不是在研究安全性,只是在研究登录模式或流程。(稍后我们将添加2步oAuth,以及HMAC等) 可能的选择 类似于https://api...com/v1/login.json 类似于https://api...com/v1/users.json 一些我没有想
- 类似于
https://api...com/v1/login.json
- 类似于
https://api...com/v1/users.json
- 一些我没有想到的事情
什么是适合登录用户的REST风格?REST理念的一个重要部分是在设计API时尽可能多地利用HTTP协议的标准功能。将这一理念应用于身份验证,客户端和服务器将利用API中的标准HTTP身份验证功能 登录屏幕对于人类用户用例非常有用:访问登录屏幕,提供用户/密码,设置cookie,客户端在所有未来请求中提供cookie。使用web浏览器的人不能期望在每个HTTP请求中提供用户id和密码
但对于RESTAPI,登录屏幕和会话cookie并不是绝对必要的,因为每个请求都可以包含凭据,而不会影响人类用户;如果客户在任何时候都不合作,则会给出
401
未经授权的响应。描述HTTP中的身份验证支持
TLS(HTTPS)也是一个选项,它允许在每个请求中通过验证另一方的公钥将客户端身份验证给服务器(反之亦然)。此外,这还为奖金渠道提供了保障。当然,要做到这一点,必须在通信之前交换密钥对。(注意,这特别是关于使用TLS识别/验证用户。使用TLS/Diffie Hellman保护通道始终是一个好主意,即使您不通过用户的公钥识别用户。)
例如:假设OAuth令牌是您的完整登录凭据。一旦客户机拥有OAuth令牌,就可以在每个请求的标准HTTP身份验证中将其作为用户id提供。服务器可以在第一次使用时验证令牌,并将检查结果与每次请求更新的生存时间一起缓存。任何需要验证的请求如果未提供,将返回
401
。TL;DR每个请求的登录不是实现API安全所必需的组件,身份验证是必需的
如果不谈一般的安全性,很难回答您关于登录的问题。对于某些身份验证方案,没有传统的登录方式
REST并没有规定任何安全规则,但实际上最常见的实现是带有3路身份验证的OAuth(正如您在问题中提到的)。本质上没有登录,至少每个API请求都没有。使用3路身份验证,您只需使用令牌
- 第一:它消除了连接器保持应用状态的任何需要 在请求之间,从而减少物理资源的消耗 提高可扩展性李>
- 第三:它允许中间人单独查看和理解请求, 当服务被动态地重新安排时,这可能是必要的李>