加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

详解ASP.NET Core Web Api之JWT刷新Token

发布时间:2020-11-25 20:16:55 所属栏目:编程 来源:网络整理
导读:这篇文章首要先容了详解ASP.NET Core Web Api之JWT革新Token,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣们下面

如上通过传入旧的会见令牌验证并获取用户身份,然后验证革新令牌是否已经逾期,假如未逾期则建设新的会见令牌,同时更新革新令牌。最终客户端会见令牌逾期的那一刻,通过革新令牌获取新的会见令牌继承挪用上一哀求,如下:

到这里关于JWT实现革新Token就已竣事,自我感受此种实现革新令牌将其存储到数据库的方案还算可取,将革新令牌存储到Redis也可行,看小我私人选择吧。上述若革新令牌验证无效,可将会见者添加至黑名单,不外是添加一个属性而已。别着急,本节内容竣事前,还留有彩蛋。

EntityFramework Core Back Fields深入切磋

无论是看视泼魅照旧看技能博客也好,必然要下手验证,看到这里认为上述我所演示是不是毫无题目,假如阅读本文的你直接拷贝上述代码你会发明有题目,且听我娓娓道来,让我们来温习下Back Fields。Back Fields定名是有约定dei,上述我是按照约定而定名,以是万万别独断专行,别糊弄,好比如下定名将抛出如下非常:

private readonly List<UserRefreshToken> _refreshTokens = new List<UserRefreshToken>(); public IEnumerable<UserRefreshToken> UserRefreshTokens => _refreshTokens;

上述我们设置革新令牌的Back Fields,代码如下:

private readonly List<UserRefreshToken> _userRefreshTokens = new List<UserRefreshToken>(); public IEnumerable<UserRefreshToken> UserRefreshTokens => _userRefreshTokens;

要是我们设置成如下情势,功效又会奈何呢?

private readonly List<UserRefreshToken> _userRefreshTokens = new List<UserRefreshToken>(); public IEnumerable<UserRefreshToken> UserRefreshTokens => _userRefreshTokens.AsReadOnly();

此时为了办理这个题目,我们必需将其显式设置成Back Fields,如下:

protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>(u => { var navigation = u.Metadata.FindNavigation(nameof(User.UserRefreshTokens)); navigation.SetPropertyAccessMode(PropertyAccessMode.Field); }); }

在我小我私人著作中也讲授到为了机能题目,可将字段举办ToList(),若举办了ToList(),必需显式设置成Back Fields,不然获取不到革新令牌导航属性,如下:

private readonly List<UserRefreshToken> _userRefreshTokens = new List<UserRefreshToken>(); public IEnumerable<UserRefreshToken> UserRefreshTokens => _userRefreshTokens.ToList();

可能举办如下设置,我想应该也可取,不会存在机能题目,如下:

private readonly List<UserRefreshToken> _userRefreshTokens = new List<UserRefreshToken>(); public IReadOnlyCollection<UserRefreshToken> UserRefreshTokens => _userRefreshTokens.AsReadOnly();

这是关于Back Fields题目之一,题目之二则是上述我们哀求获取革新令牌中,我们先在革新令牌的Back Fields中移除去旧的革新令牌,尔后再建设新的革新令牌,可是会抛出如下非常:

我们看到在添加革新令牌时,用户Id是有值的,对差池,这是为何呢?究其基础题目出在我们移除革新令牌要领中,如下:

/// <summary> /// 移除革新token /// </summary> /// <param></param> public void RemoveRefreshToken(string refreshToken) { _userRefreshTokens.Remove(_userRefreshTokens.FirstOrDefault(t => t.Token == refreshToken)); }

我们将查询出来的导航属性并将其映射到_userRefreshTokens字段中,此时是被上下文所追踪,上述我们查询出存在的革新令牌并在跟踪的革新令牌中举办移除,没短处,没找到缘故起因,于是乎,我将上述要领修改成如下看看是否必需必要主键才气删除旧的革新令牌:

/// <summary> /// 移除革新token /// </summary> /// <param></param> public void RemoveRefreshToken(string refreshToken) { var id = _userRefreshTokens.FirstOrDefault(t => t.Token == refreshToken).Id; _userRefreshTokens.Remove(new UserRefreshToken() { Id = id }); }

倒没抛出非常,建设了一个新的革新令牌,可是旧的革新令牌却没删除,如下:

至此未找到题目出在那边,当前版本为2.2,莫非不能通过Back Fields移除工具?这个题目待办理。

总结

本节我们重点讲授了怎样实现JWT革新令牌,并也略带接头了EF Core中Back Fields以及尚未办理的题目,至此关于JWT已竣事,下节开始正式进入Docker小白系列,感激阅读。

到此这篇关于详解ASP.NET Core Web Api之JWT革新Token的文章就先容到这了,更多相干ASP.NET Core Web Api JWT革新Token内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读