如何存储Web API访问令牌?

Bla*_*ise 5 asp.net-web-api asp.net-web-api2

Stackflow中有一些类似的主题,但我发现它们都没有回答我的问题.

ASP.NET Web API 2就是我们现在使用的.我现在能够接受CORS来自我的WebAPI的身份验证请求.通过在Authorization标头(Bearer xxx)中发送的访问令牌,我能够访问受[Authorize]标签保护的资源.

问题是,如何在常规登录表单中实现类似于"记住我"复选框的功能?我们想要的是用户下次访问我们的网页时不需要再次登录.仅一个会话的访问令牌?WebAPI2如何设置令牌的到期时间?我们如何在会话中保存一些信息或使用本地存储来存储此类身份验证信息?当我们在客户端存储此令牌时,我们是否需要某种加密来保护它?

你在实施这个"记住我"功能时有什么建议?

Eli*_*eth 6

"问题是,如何在常规登录表单中实现类似于"记住我"复选框的功能?"

选中"记住我"时,将令牌保存在客户端localStorage中=>当选项卡/浏览器关闭时,令牌仍处于活动状态,下次自动登录时

未选中"记住我"时,将令牌保存在客户端会话存储中=>每次关闭选项卡/浏览器时,会话存储都将被清除.下次检查令牌时,它不存在.因此,你必须再次登录...

"我们想要的是用户下次访问我们的网页时无需再次登录."

见上面的答案!

仅一个会话的访问令牌?

是的,浏览器中的选项卡是会话.

WebAPI2如何设置令牌的到期时间?

您设置令牌过期的时间!

我们如何在会话中保存一些信息或使用本地存储来存储此类身份验证信息?

仅在客户端存储加密令牌,而不是用户ID /密码

当我们在客户端存储此令牌时,我们是否需要某种加密来保护它?

令牌在服务器端加密,然后发送到客户端以获取每个请求.客户端不需要能够读取令牌.客户端必须发送它,并随心所欲地发送它.

  • 我知道问题和答案都是旧的,但仍然是:sessionStorage的问题在于它在同一浏览器的选项卡之间不是持久的.如果用户试图从链接中打开一个新的选项卡/窗口,只是为了不丢失他在当前选项卡/窗口上所做的工作,应用程序将要求再次登录,因为对于新的选项卡/窗口,将不会有对象sessionStorage再... (2认同)

Mor*_*ten 4

您的身份验证提供商应该为您提供执行此操作的功能。如果您使用 ASP.Net 会员资格提供程序,则此操作非常简单:

FormsAuthentication.RedirectFromLoginPage(strUserName, true);
Run Code Online (Sandbox Code Playgroud)

上面的“true”设置了一个持久的cookie。

当您使用 CORS 并将身份验证 cookie 发送到 WebApi 时,WebApi 并不关心身份验证是来自旧的“记住我”cookie 还是来自新登录。它只关心在 Authorization 标头中传递的 cookie 值是否有效。

至于 cookie 的加密,这也是您的身份验证提供商应该立即为您提供的内容。