什么进入JWT refresh_token?

时间:2016-09-16 03:24:48

标签: c# asp.net-core jwt refresh-token

我根据我在网上找到的一些例子,为我的Asp.net核心REST服务构建了一些JWT中间件。我得到的反应如下:

{
   "access_token":"...",
   "expires_in":3600,
   "refresh_token":"???",
   "token_type": "Bearer",
}

我了解如何创建access_token:

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);

问题是如何创建refresh_token?我搜索了高低,找不到很多文档。基本上所有引用都是“它是一个存储在数据库中的令牌,具有更长的TTL,您可以从中创建一个新的access_token”。

一个refresh_token与access_token完全相同,只有更长的TTL以及针对数据库验证的附加步骤吗?

我见过的一些示例JWT响应看起来像refresh_token要短得多。我的access_token使用RSA515签署了证书,所以字符串有点长...

1 个答案:

答案 0 :(得分:1)

现在,我个人的刷新令牌只是具有更长TTL的JWT和更多信息,可帮助我验证资源所有者。

查看Auth0中的以下文章,它支持链接

https://auth0.com/docs/tokens/refresh_token

它甚至可以是一个简单的GUID,用于将用户/客户端映射到令牌,其中到期时间也与令牌一起存储在数据库中。

以下示例来自上面的链接,他们使用看起来像Guid的刷新令牌。

  

因此,例如,假设有一个用户'test',密码为'test'   一个客户'testclient'与客户秘密'秘密',一个可以   请求新的访问令牌/刷新令牌对,如下所示:

curl -X POST -H 'Authorization: Basic dGVzdGNsaWVudDpzZWNyZXQ=' -d 'refresh_token=fdb8fdbecf1d03ce5e6125c067733c0d51de209c&grant_type=refresh_token' localhost:3000/oauth/token

{
    "token_type":"bearer",
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoiVlx1MDAxNcKbwoNUwoonbFPCu8KhwrYiLCJpYXQiOjE0NDQyNjI4NjYsImV4cCI6MTQ0NDI2Mjg4Nn0.Dww7TC-d0teDAgsmKHw7bhF2THNichsE6rVJq9xu_2s",
    "expires_in":20,
    "refresh_token":"7fd15938c823cf58e78019bea2af142f9449696a"
}

一旦他们的令牌过期,他们会通过刷新令牌进行呼叫以获得新的访问令牌。

  

现在我们可以通过点击使用刷新令牌来获取新的访问令牌   令牌端点如下:

TITLE Add and Subtract      (AddSub.asm)

; Program Assignment 1 - Subtracting Three Integers   
; Using the AddSub program From Section 3.2 as a Reference,  
; Write a program that subtracts three Integer using only 16-bit     registers,  
; Insert a call DumpRegs statement to display the register values.

INCLUDE Irvine32.inc

 .code
 main PROC

 mov eax, 90000h    ;EAX = 10000h  
 sub eax, 40000h    ;EAX = 50000h   
 sub eax, 20000h    ;EAX = 30000h   
 call DumpRegs                ; display registers    

   exit    

   main ENDP   

   END main
  

安全注意事项

     

刷新令牌是长寿的。这意味着客户从中获得一个   在服务器上,必须安全地存储此令牌以防止其被丢失   潜在的攻击者使用它,因此存储是不安全的   他们在浏览器中。如果泄漏刷新令牌,则可以使用它   获取新的访问令牌(并访问受保护的资源),直到它为止   要么已列入黑名单,要么已过期(可能需要很长时间)。刷新   必须将令牌发布到单个经过身份验证的客户端以防止使用   其他方泄露的令牌。还必须保留访问令牌   秘密,但由于其寿命较短,安全考虑较少   关键的。