请注意,我不是安全专家,此解释
是我对oauth的一般想法。我在文章中提到这一点的原因
开始是因为我看到您基于创建自己的身份验证服务器
在 oauth 2.0 协议上,这意味着有些人可能会
使用您的服务器进行身份验证,因此我不希望您这样做
有错误的概念。
session-oauth 不匹配
我想首先清除不混合会话和 oauth 的问题。恕我直言,这些是通常一起工作的两个独立的东西。
-
Oauth 协议只是为应用/用户提供访问令牌,应用/用户可以通过该访问令牌向您的服务器查询与令牌相关的数据。
-
另一方面,
Session 取决于应用程序本身。一旦某个应用程序收到令牌,他们就会使用它进行会话。当用户登录或注销时,会话被销毁,而不是 oauth。
那么oauth token的命运如何?
从服务器的角度来看,您的每个令牌都应在特定时间段后过期。这就对了。服务器不知道其他任何事情。它为您提供令牌,然后在 'n' 秒后过期。
但是,应用可能会决定要撤销访问令牌。也许他们的网站被黑了,或者他们完成了所有的 api 调用。然后他们可以向您的服务器发送一个特殊请求,告诉您强制使令牌过期。
那么用户打开多个会话应该怎么办?
绝对没有。 作为 oauth 服务提供商,您根本不关心会话。您所知道的是,如果应用要求您提供令牌,您就给他们一个。
不过,我也会回答您有关会话的问题。 您应该为同一个用户生成不同的会话吗?我会说是的。如果你有相同的会话,那么如果你从一台机器上注销,并在第二台机器上刷新页面,由于会话已过期,你的其他浏览器/机器也会自然注销。
那么 github 是如何做到不显示额外条目的呢?
我不为他们工作,所以我不知道。但我猜他们会检查每个会话,如果两个或多个会话与同一用户相关联,他们知道该用户必须使用许多设备。然后,当您的一台设备向 github 发送一些请求时,它们可以从 IP 地址猜测您所在的位置,如果您的许多机器从同一个地方发出请求,那么您必须使用多台机器。如果没有,那么可能有攻击者也在使用您的帐户。
这就是 AFAIK 银行预测恶意用户的方式 - 不是唯一的方法,它们有时还可以预测您用于访问银行记录的模式,如果该模式不同,您的帐户很有可能被盗用。
所以现在你可能会问我,你真的确定 我应该根据应用程序的要求创建尽可能多的令牌吗?
这是我不太确定的部分。据我所知,oauth 有两件事。谷歌这两个术语以了解更多信息:
-
刷新令牌:此令牌不是您的访问令牌。此令牌永不过期,一旦您的访问令牌过期,您可以使用此令牌获取新的访问令牌。此令牌也应保密。
-
离线访问类型: google、facebook等很多oauth提供者也支持这种模式。这种模式基本上允许您延长访问令牌的到期时间。例如。而不是访问令牌的正常到期时间(例如 1 小时),对于离线令牌,您可能有 1 年左右的到期时间。
回答“我应该重复使用 OAuth 2.0 访问令牌吗?”问题
是的,令牌应该在给定的到期时间内根据需要使用多次(谷歌将其设置为 1 小时)。
过期后,使用刷新令牌获取另一个访问令牌并根据需要多次使用它。不断重复这个过程。
如果您的用户无法在线让您启动 oauth 进程,并且您没有刷新令牌,则应用需要有“离线”令牌。
我应该存储我的身份验证令牌吗?
如果您的应用需要,您可以这样做,但不建议在任何地方使用,因为它可能会被泄露。令牌应该在给定的时间限制内提取数据并在再次需要时重新发布令牌。但是,您当然可以根据需要存储它们。
另一方面,“离线”令牌预计会被存储。如果你愿意,你可以加密它们,但如果范围不是太广,我根本不会打扰。