asp.net - 使用 IIS 的 ASP.NET WebAPI 如何存储我的用户身份验证状态?

标签 asp.net iis asp.net-web-api

我有一个需要对用户进行身份验证的 asp.net Web Api 2/Identity 2 应用程序。身份验证有效,但我注意到当我重新启动本地开发机器并尝试访问需要身份验证的方法时,我会失败。

由于我的应用程序与 asp.net 示例没有变化,因此我认为它使用 cookie 将用户数据存储在客户端上。服务器或 IIS 在哪里以及如何存储有关哪些用户已通过身份验证的信息?它只执行一次还是在每个 HTTP 上执行此操作?在服务器上检查身份验证和授权的方式上,我使用 Token 或 cookie 身份验证有区别吗?

最佳答案

我认为您误解了身份验证如何与 ASP.Net 一起工作。例如,让我向您展示我的一个使用 Identity 的网站的一些 cookie 详细信息(注意 token 实际上在 cookie 中,两者不是互斥的概念):

Name    __RequestVerificationToken
Value   afeILhaIvRr56jXXXXXXXXXXX
Host    site.azurewebsites.net
Path    /
Expires At end of session

请注意,默认情况下,cookie 在 session 结束时过期。这意味着当您重新启动开发机器时,您的 cookie 已过期并且您的 token 不再有效。

In particular I have read that with token authentication then there is no need for continual re-authentication every time a request is made to the server



您需要了解 HTTP 是一种无状态协议(protocol)。每个请求都是在真空中发生的,因此您需要将一些数据传回服务器,以便它可以判断使用请求 A 进行身份验证的人确实是请求 B 的发起者。几乎总是,该数据来自曲奇饼。因此,每个请求确实会重新进行身份验证,并且通常使用 cookie 中的 token 。

存储在客户端上的有关 session 的唯一数据是 cookie(除非您正在做一些非典型的事情)。其余的在服务器上。它的存储方式可能会有所不同:

进程 :最容易设置, session 存储在进程中。因此,当您的服务器或应用程序池重新启动时,该数据就会消失

状态服务器模式 : session 存储在进程中,但在 ASP.Net 工作进程之外,因此可以重新启动应用程序而不会丢失 session 数据

SQL 服务器 : 不出所料,这会将数据存储在数据库中。非常有弹性,但需要做更多的设置工作。如果您在网络农场,也是您的最佳选择。

引用:http://msdn.microsoft.com/en-us/library/vstudio/ms178586(v=vs.100).aspx

关于asp.net - 使用 IIS 的 ASP.NET WebAPI 如何存储我的用户身份验证状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458896/

相关文章:

javascript - 如何从 telerik Rad 电子表格中删除控件

asp.net - 必须在 asp.net 中单击按钮两次(在自动回发文本框之后)

asp.net - Vb6 "Tag"属性在 ASP.Net 中等效吗?

c# - 没有 Controller 的 Web API MVC 模型验证

asp.net-mvc - 在 Web API 中执行操作后更改返回的对象值

c# - 如何告诉 GridViewRow 作为 SEO 友好链接执行?

c# - ASP.NET : relative paths not working when deployed IIS

php - 调用未定义函数define()

authentication - 在azure上部署后授权不起作用

asp.net - 如何在对用户影响最小的情况下将网站部署到生产环境