如何存储Web API访问令牌?

时间:2013-11-26 18:34:36

标签: asp.net-web-api asp.net-web-api2

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

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

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

您在实施此“记住我”功能时有何建议?

2 个答案:

答案 0 :(得分:6)

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

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

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

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

见上面的答案!

仅限一个会话的访问令牌?

是的,浏览器中的标签是会话。

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

您可以设置令牌过期的时间!

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

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

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

令牌在服务器端加密,然后在每次请求时发送给客户端。客户端不需要能够读取令牌。客户必须发送它,并随时提出它。

答案 1 :(得分:4)

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

FormsAuthentication.RedirectFromLoginPage(strUserName, true);

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

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

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