为用户登录创建一个安全的临时访问令牌,这样就足够了

本文关键字:访问令牌 创建 登录 用户 安全 一个 | 更新日期: 2023-09-27 18:03:04

好的,所以我正在创建一个API,用于使用XML在web应用程序中操作用户和数据。如果他们POST XML,他们可以创建用户,等等。我使用两条腿的OAuth解决方案来保护和验证API请求。然而,这个问题不是关于安全性的那个方面,而是我要描述的方面是允许用户从API请求登录,而不必输入他们的用户名和密码,以下是我所拥有的:

步骤1,合作伙伴使用XML API创建用户,如果成功,系统返回包含新ID的路径,例如"/user/99"。

第2步,合作伙伴向用户/login/99发出请求,这将在我的数据库中创建一个新的"login Token",以下是相关属性:

UserID      int     FK
AccountID   int     FK
Token       string
Expiration  date
Used        bit

UserID和AccountID分别与Users和Accounts表相关…

Token是随机生成的GUID的前20个字符,删除了破折号,所有字符集合为ToUpper()。

过期时间距DateTime.Now 30秒

Used = false

第3步,合作伙伴将知道系统的URL(它位于与API不同的域中),现在他们可以像这样对它进行POST:

http://otherdomain.webapp.com/core/login/[insert guid here]

现在,'otherdomain'部分将是每个帐户唯一的,所以此时我们验证:

根据提供的向导查找LoginToken,如果它与匹配子域的帐户一起,未过期(30秒内),并且'Used'设置为false仍然,登录用户,设置Used = true,将它们引导到主页或另一个URL,如果一个是通过querystring提供的。

所以基本上你需要一个完整的注册应用程序和密钥和所有的jazz为OAuth简单地请求GUID,它允许你登录,但只工作一次,在30秒的窗口内…他们首先需要知道登录URL,这是否足够好?

最后,如果有人能在30秒内知道GUID和URL,他们就可以劫持登录,但这种可能性有多大?

或者,我可以添加什么来使它更安全?

为用户登录创建一个安全的临时访问令牌,这样就足够了

(免责声明:我不是安全专家。)

我注意到的直接问题是:

http ://otherdomain.webapp.com/core/login/[插入guid)

根据您的设置,GUID令牌必须在请求时提供给用户。这实际上就是请求的密码。如果您通过HTTP发送它,任何可以窥探连接的人都有令牌,并且劫持会话并不难。这绝对必须在整个过程中使用SSL。

除此之外,问题是您在用户可以使用它之前将令牌发送给用户,这不是很好。但是使用SSL就可以很好地满足您的目的。在处理不能处理正常身份验证的协议时,我使用了类似的方法,用户首先通过安全通道连接并说"我想在另一个通道上进行传输",服务器发回一个令牌,它们可以用于该请求。它在低安全性的系统上运行得很好。如果您正在保护关键数据,我强烈建议您在投入生产之前投资聘请专家进行检查。