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