Stackflow中有一些类似的主题,但我发现它们都没有回答我的问题。
我们现在使用的是ASP.NET Web API 2。我现在可以接受来自WebAPI的CORS
身份验证请求。通过在Authorization
报头(Bearer xxx)中发送的访问令牌,我能够访问由[Authorize]
标签保护的资源。
问题是,如何实现类似于常规登录表单中"记住我"复选框的功能?我们只希望用户下次访问我们的网页时不需要再次登录。访问令牌是否仅用于一个会话?WebAPI2如何设置令牌的过期时间?我们如何在会话中保存一些信息或使用本地存储来存储此类身份验证信息?当我们将此令牌存储在客户端时,是否需要某种加密来保护它?
你对实现"记住我"功能有什么建议?
"问题是,我如何实现类似于常规登录表单中的"记住我"复选框的功能?"
选中"记住我"时,将令牌保存在客户端本地存储=>当选项卡/浏览器关闭时,令牌仍然有效,下次您自动登录时
未选中"记住我"时,将令牌保存在客户端会话存储中=>每次关闭选项卡/浏览器时,会话存储都会被清除。下次检查令牌时,它不存在。因此,您必须再次登录。。。
"我们只希望用户下次访问我们的网页时不需要再次登录。"
请参阅上面的答案!
访问令牌是否仅用于一个会话
是的,浏览器中的选项卡是一个会话。
WebAPI2如何设置令牌的过期时间
您设置了令牌过期的时间!
我们如何在会话中保存一些信息或使用本地存储来存储此类身份验证信息
只在客户端存储加密令牌,从不存储用户ID/密码
当我们将此令牌存储在客户端时,是否需要某种加密来保护它
令牌在服务器端加密,然后针对每个请求发送到客户端。客户端不需要能够读取令牌。客户端只需发送一个请求即可。
您的身份验证提供程序应该为您提供这样做的功能。如果你使用ASP.Net会员服务提供商,这很简单:
FormsAuthentication.RedirectFromLoginPage(strUserName, true);
上面的"true"设置了一个持久的cookie。
当您使用CORS并将身份验证cookie发送到WebApi时,WebApi不在乎身份验证是来自旧的"记住我"cookie还是来自新登录。它所关心的只是Authorization标头中传递的cookie值是否有效。
至于cookie的加密,这也是您的身份验证提供商应该为您提供的开箱即用的东西。