5

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

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

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

您对实现“记住我”功能有何建议?

4

2 回答 2

6

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

Save the token in the clientside localStorage when "Remember me" is checked => When the tab/browser is closed the token is still alive and next time you are automatically logged in

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

“我们想要的是用户下次访问我们的网页时不需要再次登录。”

见楼上答案!

访问令牌是否仅用于一个会话?

是的,浏览器中的选项卡是一个会话。

WebAPI2如何设置token的过期时间?

您设置令牌到期的时间!

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

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

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

令牌在服务器端加密,然后针对每个请求发送到客户端。客户端不需要能够读取令牌。客户端必须将其与每个请求一起发送。

于 2014-01-16T22:18:32.467 回答
4

您的身份验证提供程序应该为您提供执行此操作的功能。如果您使用 ASP.Net Membership 提供程序,这很简单:

FormsAuthentication.RedirectFromLoginPage(strUserName, true);

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

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

至于 cookie 的加密,这也是您的身份验证提供商应该开箱即用地为您提供的东西。

于 2013-11-27T10:56:00.667 回答