当需要对客户端进行身份验证时,使用长期令牌还是加密存储用户名和密码?
When needing to authenticate a client, use a long-term token or store username and password encrypted?
我正在制作一个家长应用程序,我需要客户端(Windows 服务)每隔 X seconds/minutes 与服务器一起更新。出于明显的原因,每次客户端需要与服务器更新时,我都不能让用户输入密码,所以我想知道这是否是更好的做法:
- 发送一次用户名+密码,并获得一个不会过期的令牌,直到发出新的令牌或
- 将加密的用户名和密码存储在客户端计算机上
使用令牌进行身份验证总是比用户名+密码更好,因为如果有人设法访问保存的凭据(令牌或密码),泄露密码造成的损害总是高于随机令牌造成的损害仅供您的服务使用,可随时更换。
此外,人们往往会重复使用密码,这意味着滥用密码不仅会在您的服务中引发安全问题。
在我看来,OAuth2 是基于令牌的身份验证系统的一个很好的例子:它有两种类型的令牌:刷新和访问。访问令牌就像您所描述的那样,刷新令牌允许生成新的访问令牌并使先前的访问令牌无效。这使得“更新”访问令牌成为可能,例如每周或每月。
我正在制作一个家长应用程序,我需要客户端(Windows 服务)每隔 X seconds/minutes 与服务器一起更新。出于明显的原因,每次客户端需要与服务器更新时,我都不能让用户输入密码,所以我想知道这是否是更好的做法:
- 发送一次用户名+密码,并获得一个不会过期的令牌,直到发出新的令牌或
- 将加密的用户名和密码存储在客户端计算机上
使用令牌进行身份验证总是比用户名+密码更好,因为如果有人设法访问保存的凭据(令牌或密码),泄露密码造成的损害总是高于随机令牌造成的损害仅供您的服务使用,可随时更换。
此外,人们往往会重复使用密码,这意味着滥用密码不仅会在您的服务中引发安全问题。
在我看来,OAuth2 是基于令牌的身份验证系统的一个很好的例子:它有两种类型的令牌:刷新和访问。访问令牌就像您所描述的那样,刷新令牌允许生成新的访问令牌并使先前的访问令牌无效。这使得“更新”访问令牌成为可能,例如每周或每月。