使用 AspNetUserTokens table 在 ASP.NET Core Web Api 中存储刷新令牌
Using AspNetUserTokens table to store refresh token in ASP.NET Core Web Api
我正在使用 ASP.NET Core Web API 应用程序。我正在尝试在 ASP.NET Identity(内置数据库 tables)之上实现基于 Jwt 令牌的身份验证。
我已经实现了所有场景,如注册用户、登录等,但现在尝试实现刷新令牌流(访问令牌过期时,客户端需要使用刷新令牌替换访问令牌)。我看到人们正在创建新的 table (refreshToken) 来存储刷新令牌,以便可以使用访问令牌对其进行验证,并且将生成新的访问和刷新令牌
https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/
我创建了新的 table(refreshToken) 来存储刷新令牌并验证它以生成访问令牌,它工作正常但我想看看我是否可以使用现有的 AspNetUserTokens table 来处理同样的场景。我了解 AspNetUserTokens table 用于确认电子邮件、忘记密码等
我的问题是:如果有人使用 AspNetUserTokens 存储刷新令牌,请分享想法,因为 usermanager class 不公开直接令牌模型(AspNetUserTokens)并且不确定如果我使用 IdentityDbContext,利弊是什么?我已经实现了 IdentityDbContext 但我没有看到在 Microsoft.AspNetCore.Identity 中内置 class 来在 AspNetUserTokens
中存储令牌
非常感谢您的指导。
谢谢
我会直接回答你的问题,然后提出一个替代方案。您可以使用 AspNetUserTokens table 删除、设置、获取和验证令牌。但是,您可以跳过数据库,我将在下面进行描述。
UserManager 的以下方法将生成并存储:
await _userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
await _userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);
UserManager 的以下方法将获取并验证:
var refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var isValid = await _userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken );
您需要在 Startup 中使用 IdentityBuilder 设置这样的提供程序。
identity.AddTokenProvider("MyApp", typeof(DataProtectorTokenProvider<User>)
作为将这些令牌存储在数据库中的替代方法,您可以根据需要使用以下方法使所有令牌失效。您可以将此作为注销的一部分。
_userManager.UpdateSecurityStampAsync(user);
我正在使用 ASP.NET Core Web API 应用程序。我正在尝试在 ASP.NET Identity(内置数据库 tables)之上实现基于 Jwt 令牌的身份验证。
我已经实现了所有场景,如注册用户、登录等,但现在尝试实现刷新令牌流(访问令牌过期时,客户端需要使用刷新令牌替换访问令牌)。我看到人们正在创建新的 table (refreshToken) 来存储刷新令牌,以便可以使用访问令牌对其进行验证,并且将生成新的访问和刷新令牌
https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/
我创建了新的 table(refreshToken) 来存储刷新令牌并验证它以生成访问令牌,它工作正常但我想看看我是否可以使用现有的 AspNetUserTokens table 来处理同样的场景。我了解 AspNetUserTokens table 用于确认电子邮件、忘记密码等
我的问题是:如果有人使用 AspNetUserTokens 存储刷新令牌,请分享想法,因为 usermanager class 不公开直接令牌模型(AspNetUserTokens)并且不确定如果我使用 IdentityDbContext,利弊是什么?我已经实现了 IdentityDbContext 但我没有看到在 Microsoft.AspNetCore.Identity 中内置 class 来在 AspNetUserTokens
中存储令牌非常感谢您的指导。
谢谢
我会直接回答你的问题,然后提出一个替代方案。您可以使用 AspNetUserTokens table 删除、设置、获取和验证令牌。但是,您可以跳过数据库,我将在下面进行描述。
UserManager 的以下方法将生成并存储:
await _userManager.RemoveAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var newRefreshToken = await _userManager.GenerateUserTokenAsync(user, "MyApp", "RefreshToken");
await _userManager.SetAuthenticationTokenAsync(user, "MyApp", "RefreshToken", newRefreshToken);
UserManager 的以下方法将获取并验证:
var refreshToken = await _userManager.GetAuthenticationTokenAsync(user, "MyApp", "RefreshToken");
var isValid = await _userManager.VerifyUserTokenAsync(user, "MyApp", "RefreshToken", refreshToken );
您需要在 Startup 中使用 IdentityBuilder 设置这样的提供程序。
identity.AddTokenProvider("MyApp", typeof(DataProtectorTokenProvider<User>)
作为将这些令牌存储在数据库中的替代方法,您可以根据需要使用以下方法使所有令牌失效。您可以将此作为注销的一部分。
_userManager.UpdateSecurityStampAsync(user);