Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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
C# 服务器应用程序重新启动导致OAuth2内存中令牌丢失_C#_Asp.net Core_Oauth 2.0_Access Token - Fatal编程技术网

C# 服务器应用程序重新启动导致OAuth2内存中令牌丢失

C# 服务器应用程序重新启动导致OAuth2内存中令牌丢失,c#,asp.net-core,oauth-2.0,access-token,C#,Asp.net Core,Oauth 2.0,Access Token,我在应用程序的测试阶段遇到了这个问题。客户端将令牌的过期日期设置为很长的时间(19年左右),所以我们不会在测试期间经常请求新令牌。但过了一段时间,它出来的令牌已经过期(随机时间后) 问题是服务器应用程序正在重新启动/更新,导致内存令牌丢失,并导致我的简单检查失效。\u不工作: if (_currentToken.ExpirationDate < DateTime.Now.AddMinutes(1)) { _currentToken = GetToken(); } if(_curr

我在应用程序的测试阶段遇到了这个问题。客户端将令牌的过期日期设置为很长的时间(19年左右),所以我们不会在测试期间经常请求新令牌。但过了一段时间,它出来的令牌已经过期(随机时间后)

问题是服务器应用程序正在重新启动/更新,导致内存令牌丢失,并导致我的简单检查失效。\u不工作:

if (_currentToken.ExpirationDate < DateTime.Now.AddMinutes(1))
{
    _currentToken = GetToken();
}
if(_currentToken.ExpirationDate
我如何确保这种情况?这也可能发生在生产环境中,但希望很少发生,因为应用程序重启更少,令牌时间更短。不幸的是,我没有访问服务器端授权设置的权限,并且令牌不会分发到任何存储中


我希望避免在每次操作之前调用服务器上的一些虚拟操作来检查它是否返回
401 unauthorized

在我看来,服务器端有责任验证令牌,并决定使用令牌的请求是否可以访问特定的受保护资源。所以正如@armagedescu所建议的,在执行令牌请求时只需发送令牌,服务器端将检查诸如过期时间、颁发者等声明。。。还要检查签名。如果令牌过期,它将返回401状态代码,并将
错误
错误描述
错误uri
属性添加到
WWW-Authenticate
头中以报告其他错误信息:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer realm="example",
                   error="invalid_token",
                   error_description="The access token expired"

然后在客户端,您可以检查错误,并刷新访问令牌以执行另一个令牌请求。

如果在到期日期之前调用GetToken(),会发生什么情况?它只会从auth server请求新令牌。调用它并使用它,而不是您建议的在每次请求之前只获取新令牌的上一个键?它有点违背了OAuthNot在每个请求之前的全部目的。执行一次,并立即刷新密钥、过期日期,以延长新的时间段。出于安全原因,您应该能够随时这样做,至少因为密钥本身在理论上或实践上都可能被泄露。