我正在构建一个将托管在服务器上的应用程序.我想为应用程序构建一个API,以便于与任何平台(Web App,Mobile App)进行交互.我不理解的是,在使用REST API时,我们如何对用户进行身份验证.
例如,当用户已登录然后想要创建论坛主题时.我怎么知道用户已经登录?
RESTful Web服务返回的表示形式(html,xml,json)应该由url还是Accept HTTP标头确定?
我在SO上发现了很多关于这个主题的问题,但是找不到任何回答这个问题的问题:
我应该使用用户名和密码,还是使用API密钥验证用户?每种方法的优缺点是什么?
我问这个是因为在我的API中,有几种方法我想锁定并验证用户是否可以访问某些文档或操作.我有点不愿意通过让用户使用他们的用户名和密码发送HTTP AUTH标头进行身份验证,因为它感觉不安全并且对用户来说更麻烦.另一方面,如果我使用API密钥,那么用户创建密码的重点是什么?因为他们将不再使用它来访问API的功能.
UPDATE
如果其他读者对我最终使用的内容感到好奇,我决定复制亚马逊的验证方式(这里有很好的解释:https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf)
我们正在使用WCF构建一个RESTful API(目前.Net 3.5,但很快将转向.Net 4).我们有一个功能框架,但目前没有安全保障.它需要可以从.Net应用程序以及iOS,Android和Web应用程序访问.
我们想使用此处和此处描述的HMAC身份验证方案,但在描述如何验证哈希时,这两个示例似乎都分崩离析.第一个示例无法描述UserKeys对象(哈希表?),第二个示例缺少客户端和服务器端的GetUserKey方法.
任何人都可以解释如何在这些示例中生成/存储/检索/使用"用户密钥"/令牌,或者提供如何在RESTful WCF服务中使用HMAC授权的更好示例(如果可能的话,还有源代码)?
编辑: 经过更多的研究,我们确定我们需要更多的" 授权 "技术而不是" 身份验证 "技术(语义?).我们实施了基本授权并保护了SSL背后的API.基本授权使用与Web请求相同的"授权"标头作为HMAC 身份验证方案,但传递用Base64编码的用户名:密码字符串而不是令牌.这允许我们针对我们的数据库自定义验证用户,以确定用户是否获得许可并具有访问所需API方法的适当安全权限.
我们当然愿意听取有关如何完成自定义用户名/密码验证的其他选项以及其他保护API的方法.
如果我有:用户,则需要使用api rest登录。最好的方法是什么?
1 /用户/ ID /密码
2 / users?id = id&password = pass
如果使用第二个选项,则需要验证是否有get参数。如果不是,它将返回所有结果。
这不是我现在想要的答案: REST API登录模式