Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core AspNetCore.Authentication.JwtBearer中的JWTBeareAuthentication和刷新令牌_Asp.net Core_Token_Jwt_Claims Based Identity - Fatal编程技术网

Asp.net core AspNetCore.Authentication.JwtBearer中的JWTBeareAuthentication和刷新令牌

Asp.net core AspNetCore.Authentication.JwtBearer中的JWTBeareAuthentication和刷新令牌,asp.net-core,token,jwt,claims-based-identity,Asp.net Core,Token,Jwt,Claims Based Identity,我正在visual studio 2015中使用aspnetcore。 我已经实现了JWTBeareAuthentication,并且成功地使用了令牌身份验证。因此,用户登录并获得令牌 现在,我的代币有一个到期时间跨度。过期后,用户将无法再进行验证。我希望能够在到期前几分钟在客户端静默地刷新用户的令牌。如何在这种设置中实现这一点?使用Microsoft.AspNetCore.Authentication.JwtBearer是否可能?是的,这是可能的。您可以创建一个刷新令牌(例如一个随机字符串),

我正在visual studio 2015中使用aspnetcore。 我已经实现了JWTBeareAuthentication,并且成功地使用了令牌身份验证。因此,用户登录并获得令牌


现在,我的代币有一个到期时间跨度。过期后,用户将无法再进行验证。我希望能够在到期前几分钟在客户端静默地刷新用户的令牌。如何在这种设置中实现这一点?使用Microsoft.AspNetCore.Authentication.JwtBearer是否可能?

是的,这是可能的。您可以创建一个刷新令牌(例如一个随机字符串),并设置一个比您的秘密令牌更长的过期时间。将此令牌发送到您的客户端,并将其保存在客户端中。每当主令牌过期时,您可以将刷新令牌发送到服务器并进行检查, 而不是将用户发送到登录页面(并创建新令牌)。 如果尚未过期,则创建新令牌和刷新令牌并设置对用户的访问权限,标头必须包含:

This site says...
{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJlUzl1NiJ9.eyJ1bmlxdWVfbmFtZ...",
    "token_type": "bearer",
    "expires_in": 119,
    "refresh_token": "9b091854a9d3415c8ae12f07c333e5...",
}

我假设您使用的是WebApi(与MVC/Views相反),在这种情况下,您的中间件将返回http代码401。您的客户端(该api的使用者)必须对此做出反应,并尝试刷新/验证用户并获取新令牌,然后重复前面的请求。这和JWT持有者middlewareok无关。。。它应该打电话到哪里去拿新的代币?初始令牌是通过用户名和密码获得的,无论您在哪里获得它。ASP.NET Core Identity无法发行JWT令牌,因此您需要一个不同的中间件/库(ASOS/OpenIddict或IdentityServer4),或者您使用第三方OpenID/Oauth提供商,如Google或Facebook,如果您从那里获得令牌,则需要在这里刷新令牌。但是你的问题缺乏必要的信息,我们不知道你从哪里得到JWT;)我正在使用一个cutom中间件,我设法将它包装在System.IdentityModel.Tokens.Jwt周围。。。但是在看到代码后,我可以像第一个一样处理另一个对自定义地址的请求,并自己重新发布一个新令牌,这次只基于旧令牌。。。