有一个项目和数据库包含“Users”表及其登录名和密码。 主要项目是Web,所以使用Forms身份验证,没关系。 但是,该项目提供了一些API,以便其他开发人员可以开发自己的软件(适用于任何平台:web,windows,iphone,android等),实现或多或少相同的功能,提供主要的Web项目。 但是,只有在用户成功通过身份验证时,才能访问API。 所以我在考虑如何实现这个功能。
选项#1: API包含一种方法,用户可以发送他们的用户名/密码并得到一些临时令牌(这意味着我必须在服务器上的某处保留此令牌,这也是问题:多长时间?)然后我可以接受其他API如果用户的令牌与我保留在服务器上某处的令牌匹配,则调用。 听起来很讨厌。
选项#2: 所有API方法还必须包含其他字段:用户名/密码。 听起来也很讨厌。
请告知什么是正确的选择?
答案 0 :(得分:0)
选择#1选项。我会在你的数据库中创建一个名为ApiKey
的表。我有一个用户ID的外键,你可以有一个可选的到期字段和/或最大请求限制。创建用于对用户进行身份验证的API,然后创建唯一的API密钥,然后将此密钥发送给用户。用户可以使用此API密钥访问您的其余API。
答案 1 :(得分:0)
如果你打算发行代币,请考虑支持OAuth。它,甚至有很多很好的软件包可以为你处理很多这样的软件包,使令牌管理/认证非常无缝。
此外,this。除非你绝对必须,否则不要编写自己的auth框架。很多人已经为你做过这件事。
答案 2 :(得分:0)
正如其他人在使用asp.net OWIN中间件选项#1之前所说的那样。您不必在服务器端存储令牌,OWIN将发出令牌,它有责任“解码”令牌以查找它是否有效。您无需编写代码来验证令牌。
每次请求都会发送用户名和密码?永远不会永远不会。
详细了解OWN和Katana:OWIN and Katana
关于保护Web API的好文章:Secure WEB API