ASP.NET WEB API 服务器上存储的授权令牌信息在哪里?

2023-12-22

在用户注册后,在我的 Web Api 2 Identity 2 应用程序中,我在单个表中有一条记录:AspNetUsers。我使用以下 http 请求来获取令牌:

POST https://localhost:44304/Token HTTP/1.1
Accept: application/json
Content-type: application/x-www-form-urlencoded
Accept-Encoding: gzip
Content-Length: 68
Host: localhost:44304
Connection: Keep-Alive
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)

grant_type=password&[email protected] /cdn-cgi/l/email-protection&password=123456

我得到了 access_token 的响应:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 695
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.0
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcU2VyZ2V5XERvY3VtZW50c1xWaXN1YWwgU3R1ZGlvIDIwMTNcUHJvamVjdHNcbXZjX3dlYmFwaVxXZWJBcHBsaWNhdGlvblxXZWJBcHBsaWNhdGlvblxUb2tlbg==?=
X-Powered-By: ASP.NET
Date: Tue, 25 Nov 2014 17:40:07 GMT

{"access_token":"gsvW23e1...}

获得令牌后,数据库中不会添加任何记录。表 AspNetUsers 中仍然只有一条记录。数据库中的任何表中均不存储有关已发行令牌的信息。

我在 Web api 控制器中使用以下代码来验证用户身份:

var currentUser = manager.FindById(User.Identity.GetUserId());
if (currentUser == null)
{
    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
    return ResponseMessage(response);
}

之后,我执行密码更改并尝试使用旧的 access_token (我在密码更改之前获得的)调用一些 Web api 控制器方法,并且 access_token 仍然有效!当前用户不为空! 我读过 stackoverflow 上的其他帖子ASP.Net Identity 注销所有会话 https://stackoverflow.com/questions/21218027/asp-net-identity-sign-out-all-sessions ASP.Net 身份注销 https://stackoverflow.com/questions/20681726/asp-net-identity-logout和博文https://timlotter.com/blog/asp-net-identity-invalidate-all-sessions-on-securitystamp-update/ https://timmlotter.com/blog/asp-net-identity-invalidate-all-sessions-on-securitystamp-update/但我还是不明白发行的代币的信息存储在哪里。 所以我的问题是: 1)access_token的信息存储在服务器的哪里? 2)为什么修改密码后我仍然可以使用修改密码前服务器颁发的access_token? 3)如何使修改密码前发放的所有access_token失效?


1) 令牌不存储在数据库或本地存储中的任何位置。这意味着令牌不会存储在服务器中的任何位置。

2) 实际上,密码重置令牌是使用 SecurityStamp 生成的,并根据用户的 SecurityStamp 进行验证。除非您未设置过期时间或更新该用户的 SecurityStamp,否则令牌不会过期。

可以在身份配置类的 userManager 属性上设置过期时间。以下示例显示令牌生命周期为 1 小时。查看this http://www.asp.net/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity文章。

 if (dataProtectionProvider != null)
 {
    manager.UserTokenProvider =
       new DataProtectorTokenProvider<ApplicationUser>
          (dataProtectionProvider.Create("ASP.NET Identity"))
          {                    
             TokenLifespan = TimeSpan.FromHours(1)
          };
 }

您可以使用自己的机制来检查以前使用过的令牌。

3) 更新安全标记。这将使为该用户颁发的所有令牌失效,包括 cookie。最好用你自己的想法来制作过期密码重置令牌。

作为示例,您可以使用另一列将任何生成的密码重置令牌存储在数据库中并验证它(可能有更好的方法来做到这一点)。

请记住,登录 access_token 的生成方式不同,并且它具有您在 Owin 启动承载令牌过期时间中设置的过期时间。

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET WEB API 服务器上存储的授权令牌信息在哪里? 的相关文章

  • 如何从 MS Graph 中的私人用户获取完整令牌?

    我检查 jwt io 中收到的用户的令牌 https i stack imgur com 03OUD png https i stack imgur com 03OUD png来自组织目录中的帐户 https i stack imgur c
  • 具有 Identity Server4 并发登录的隐式授予 SPA

    如何使用授权类型限制特定 SPA 客户端中每个客户端应用程序的 x 登录次数 隐式 这超出了身份服务器的范围 https github com IdentityServer IdentityServer4 issues 736 尝试过的解决
  • ASP.NET身份重置密码

    如何在新的 ASP NET Identity 系统中获取用户的密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 或者在不知道当前密码的情况下如何重置 用户忘记密码 如果您想使用 UserManager 更改密码 但不想提供用户的当前
  • 如何在 Angular 应用程序中存储身份验证令牌

    我有一个与 REST API 服务器通信的 Angular 应用程序 SPA 我有兴趣找到存储从 API 服务器返回的访问令牌的最佳方法 以便 Angular 客户端可以使用它来验证未来的请求到 API 出于安全原因 我想将其存储为浏览器会
  • ASP.NET Identity - 如何将 dbo.AspNetUsers.Id 更改为非聚集索引?

    我正在使用 ASPNET Identity 2 0 并且需要 添加一个名为 ApplicationUserId int 聚集索引的新字段 将 dbo AspNetUsers Id nvarchar 字段从聚集索引更改为非聚集索引 在我的 M
  • Web API 2、OWIN 身份验证、SignOut 不注销

    我正在做一些研究 以期使用 Bearer 令牌作为身份验证机制 即 AngularJS UI 通过 Web API 2 项目中的 OWIN 进行身份验证 我的登录工作正常 角色信息等一切都很好 但我无法获取用于注销的令牌 我的启动配置是这样
  • ASP.Net Identity 2 通过短信重置密码

    我希望在重置密码时向用户发送短信 我已经具备发送短信的功能 我只需要有关如何使用 Identity 2 0 进行设置的指南 我似乎无法在网上找到任何有用的信息 参考代码本身也没有正确注释 我想生成一个安全代码 将其发送给用户 然后他必须将其
  • Identity 3 SignInManager.PasswordSignInAsync() 不返回任何结果

    我正在使用 Identity 3 0 创建 Web 应用程序 但 SignInManager PasswordSignInAsync 方法有问题 我像在文档中一样使用它 但它不会返回任何内容 应用程序代码就停在那里 这是我的控制器代码 pu
  • HttpContext.GetOwinContext().GetUserManager() 返回 null

    我使用 ASP NET Identity 2 创建角色 但结果是HttpContext GetOwinContext GetUserManager
  • Swagger UI 嵌套可扩展分组

    我正在使用 SwaggerUI 来记录 API 端点 目前 它们按控制器名称分组在一个长列表中 然后 您可以展开每个控制器来查看操作 一切标准 我想做的是将控制器分组到常见的可扩展组下 例如 您有一个宠物组 可以将其展开以显示猫和狗控制器
  • .AspNetCore.相关性。未找到国家财产。未知地点

    我正在使用 OIDC 的混合身份验证流程 options Events OnRedirectToIdentityProvider redirectContext gt if redirectContext Request Path Star
  • 添加之前检查用户的角色是否存在

    我正在尝试为用户添加角色 但在此之前我想检查它是否存在 我怎样才能做到这一点 这是我的代码 public void AddRoleForUser ApplicationUser obj IdentityRole role userManag
  • 在 ASP.NET 身份框架中更改时刷新当前用户的角色?

    使用 VS 2013 标准 MVC 模板和身份提供程序框架 用户已登录 我有 UserManager AddToRole User Identity GetUserId Members Line X RedirectToAction Ind
  • 如何保留使用 MCV5/OWIN 更新的 cookie 声明

    我们正在开发一个 OWIN MVC5 项目 我们使用自己的实现IUserStore
  • ASP.NET 5 MVC6 User.GetUserId() 返回错误的 ID

    我在 ASP NET 5 中有一个简单的项目 只有一个注册用户 我尝试通过扩展方法获取当前登录用户的IDGetUserId from using System Security Claims命名空间 不幸的是 这个方法返回给我不存在的ID
  • Asp.Net Identity - 登录后更新声明

    当我的用户从我们的单页应用程序登录时 我使用 asp net 身份 WebApi 2 MVC 5 而不是 net core 添加对用户身份的声明 看起来像这样 我已经取消了对无效名称 锁定帐户等的检查 public override asy
  • OnValidateIdentity 会话为空 - Mvc Owin

    目前 我在 OnValidateIdentity 中访问 Session 时遇到问题 HttpContext Current Session一片空白 怎么了 我的申请如下 我有 2 个项目 Mvc 与 WebApi 我希望用户在更改密码时注
  • MVC User.Identity.Name 包含名字和姓氏

    我已将名字和姓氏添加到ApplicationUser Class public class ApplicationUser IdentityUser public async Task
  • Dapper MySQL 返回值

    我在 ASP net Identity 项目中使用 dapper 和 MySql 时遇到问题 我想将用户插入到表 users 中 并希望从这次插入中返回自动生成的 id 但我收到语法错误 我不知道为什么 这是我的方法插入代码 public
  • 使用 Azure 表存储进行代码优先和身份验证

    我正在开发一个小型网络应用程序 并且刚刚达到开发阶段 我需要开始做出数据库决策 我最初的计划是在 Azure 上使用 EF Code First 和 MSSQL 因为它只是简化了使用数据库的过程 然而 当我研究 Azure 上的数据库托管功

随机推荐