C# JWT访问令牌与刷新令牌(创建)
我正在创建一个Asp.net核心REST服务。目前正在通过JWT承载令牌进行身份验证 现在,我的代码如下所示:C# JWT访问令牌与刷新令牌(创建),c#,asp.net-core,jwt,C#,Asp.net Core,Jwt,我正在创建一个Asp.net核心REST服务。目前正在通过JWT承载令牌进行身份验证 现在,我的代码如下所示: DateTimeOffset dtNow = DateTime.Now; Claim[] claims = new Claim[] { new Claim(JwtRegisteredClaimNames.Sub, strUsername), new Claim(JwtRegisteredC
DateTimeOffset dtNow = DateTime.Now;
Claim[] claims = new Claim[]
{
new Claim(JwtRegisteredClaimNames.Sub, strUsername),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
new Claim(JwtRegisteredClaimNames.Iat, dtNow.ToUnixTimeSeconds().ToString(), ClaimValueTypes.Integer64)
};
JwtSecurityToken jwtAccess = new JwtSecurityToken(_options.Issuer, _options.Audience, claims, dtNow.DateTime, dtNow.DateTime.Add(_options.AccessTokenExpiration),
_options.SigningCredentials);
var response = new
{
access_token = new JwtSecurityTokenHandler().WriteToken(jwtAccess),
token_type = "Bearer",
expires_in = (int)_options.AccessTokenExpiration.TotalSeconds,
refresh_token = ""
};
问题:
希望其中一些是有帮助的。我说的是一些小经验,但是有很多很好的资源可以从IdentityServer3(现在是4)上的家伙那里或者从他们那里解释这些东西。谢谢Tim。请澄清一下#2.我发布的代码,我会创建refresh_令牌吗,与我创建的jwtAccess相同,除了1)60天到期2)将其保存在DB中?你用你的#2答案把我弄糊涂了,因为我看到的每个响应对象,访问令牌和刷新令牌看起来都有点相似?@SledgeHammer抱歉搞糊涂了。有两种类型的令牌:自包含令牌和引用令牌。在自包含令牌中,所有信息(如声明和角色)都将存储在令牌中,并且可以在不调用授权服务的情况下检索。这将是您的访问令牌。引用令牌只是存储在数据库中的标识符。标识符链接到您需要的所有信息,但您必须调用授权服务来获取信息。这将是您的参考标记。2)和3)不正确。由于刷新令牌格式完全是特定于实现的(与访问令牌或授权代码完全相同),因此可以使用JWT、SAML或自定义格式。如果使用JWT或SAML,则将无法达到此目的。JWT包含刷新令牌不应该知道/关心的信息。它应该只是一个存储在授权提供程序上的ID。实际上,不,这不是规范所说的:“刷新令牌是一个字符串,表示资源所有者授予客户端的授权。该字符串对客户端通常是不透明的。”,它的定义与用于访问令牌的定义完全相同:。人们完全可以自由决定如何格式化刷新令牌。它不必是“引用字符串”。