You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用EntityFrameworkCore搭配Identity Server4时,access_token存储于哪个表?

Access Token 在 IdentityServer4 + EF Core 中的存储位置

嘿,这个问题问到点子上了!当你把EntityFrameworkCore和IdentityServer4搭在一起开发时,access_token的存储位置得看你的配置和token类型,我给你掰扯清楚:

核心存储表:PersistedGrants

IdentityServer4通过EntityFrameworkCore实现持久化时,所有需要持久化的token(包括access_token、refresh_token、授权码等)都会存在PersistedGrants表中。这个表是IdentityServer4.EntityFramework包自带的,关键字段包括:

  • Key:token的唯一标识(主键)
  • Type:用来区分token类型,比如access_token、refresh_token、authorization_code
  • SubjectId:token所属的用户ID
  • ClientId:请求token的客户端ID
  • Expiration:token的过期时间

分情况讨论:不是所有access_token都会存在数据库里

这里要注意两种常见的token模式:

  • 参考令牌(Reference Token)模式:这种模式下,返回给客户端的access_token只是一个短引用,实际的token数据会存在PersistedGrants表中。每次客户端用这个引用请求资源时,IdentityServer会去数据库校验这个引用的有效性。
  • JWT(JSON Web Token)模式:JWT是自包含的令牌,所有用户和权限信息都编码在token本身里。默认情况下,IdentityServer不会把JWT类型的access_token存在数据库中——除非你特意配置了持久化JWT(比如需要审计或者 revoke 功能),此时JWT数据才会写入PersistedGrants表。

如何确认你的配置?

如果你在Startup类里配置了操作存储(Operational Store),就说明用了EF Core来持久化这些token,代码大概是这样的:

services.AddIdentityServer()
    .AddOperationalStore(options =>
    {
        options.ConfigureDbContext = b =>
            b.UseSqlServer("你的数据库连接字符串",
                sql => sql.MigrationsAssembly("你的迁移程序集名称"));
        // 可选:设置token的自动清理策略
        options.EnableTokenCleanup = true;
    });

这段代码就是告诉IdentityServer用EF Core来管理PersistedGrants表(还有DeviceCodes表,用于设备流认证)。


内容的提问来源于stack exchange,提问作者Rakesh Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:51:32