我们正在使用Identity创建一个Asp.NET MVC-5应用程序,并使用OAuth2通过WebAPI访问数据库。当用户使用用户名和密码登录时,MVC应用程序使用此信息登录WebAPI以请求第一个access_token和refresh_token。这些令牌以用户的用户名作为密钥存储在MVC应用程序中的字典中。令牌不会暴露在MVC应用程序之外。然后,我们使用用户的用户名从字典中检索用户所做的每个请求中的令牌。
我们在MVC应用程序中使用Identity与Cookie身份验证。 MVC应用程序将每隔一段时间(每周左右)重启一次,这意味着我们将丢失存储在内存中的访问权限和刷新令牌。
我的问题:
我们使用User.Identity.Name提供的UserName作为从字典中检索用户的access_token和refresh_token的键。这样安全吗?我假设Identity从cookie中检索这个。用户是否可以更改cookie以假装成另一个用户,或者Identity的序列化是否足够安全?
我计划将刷新令牌也存储在cookie中,这样当MVC应用程序重新启动时,我们可以使用此令牌对用户进行身份验证,而不必强制用户重新登录。这基本上是同样的问题1.这样安全吗?
如果两者实际上都不安全,那么创建一个我们存储这些数据的小型本地数据库是否足够,并使用cookie中的GUID来检索它?我们试图避免需要本地数据库,但如果有必要那么就这样吧。
感谢您的帮助。
答案 0 :(得分:1)
在Cookie中存储刷新或访问令牌是不安全的。
请参阅Where to store access and refresh tokens on ASP.NET client web app - calling a REST API
您不应该担心“丢失存储在内存中的访问和刷新令牌”。如果它发生,只需重新创建它们。
BTW:将任何用户数据存储在内存字典中并不是一个好主意。使用ASP会话管理。添加任何支持(进程内,数据库,redis)会容易得多。