Cookie中的OAuth2刷新令牌

时间:2015-08-28 10:57:38

标签: asp.net-mvc cookies asp.net-mvc-5 oauth-2.0 asp.net-identity

我们正在使用Identity创建一个Asp.NET MVC-5应用程序,并使用OAuth2通过WebAPI访问数据库。当用户使用用户名和密码登录时,MVC应用程序使用此信息登录WebAPI以请求第一个access_token和refresh_token。这些令牌以用户的用户名作为密钥存储在MVC应用程序中的字典中。令牌不会暴露在MVC应用程序之外。然后,我们使用用户的用户名从字典中检索用户所做的每个请求中的令牌。

我们在MVC应用程序中使用Identity与Cookie身份验证。 MVC应用程序将每隔一段时间(每周左右)重启一次,这意味着我们将丢失存储在内存中的访问权限和刷新令牌。

我的问题:

  1. 我们使用User.Identity.Name提供的UserName作为从字典中检索用户的access_token和refresh_token的键。这样安全吗?我假设Identity从cookie中检索这个。用户是否可以更改cookie以假装成另一个用户,或者Identity的序列化是否足够安全?

  2. 我计划将刷新令牌也存储在cookie中,这样当MVC应用程序重新启动时,我们可以使用此令牌对用户进行身份验证,而不必强制用户重新登录。这基本上是同样的问题1.这样安全吗?

  3. 如果两者实际上都不安全,那么创建一个我们存储这些数据的小型本地数据库是否足够,并使用cookie中的GUID来检索它?我们试图避免需要本地数据库,但如果有必要那么就这样吧。

  4. 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在Cookie中存储刷新或访问令牌是不安全的。

请参阅Where to store access and refresh tokens on ASP.NET client web app - calling a REST API

您不应该担心“丢失存储在内存中的访问和刷新令牌”。如果它发生,只需重新创建它们。

BTW:将任何用户数据存储在内存字典中并不是一个好主意。使用ASP会话管理。添加任何支持(进程内,数据库,redis)会容易得多。