Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.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/8/api/5.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# Xamarin.iOS/Web API JWT刷新令牌(如果到期)_C#_Api_Authentication_Xamarin_Jwt - Fatal编程技术网

C# Xamarin.iOS/Web API JWT刷新令牌(如果到期)

C# Xamarin.iOS/Web API JWT刷新令牌(如果到期),c#,api,authentication,xamarin,jwt,C#,Api,Authentication,Xamarin,Jwt,我有一个webapi,它为用户提供了需要在我的移动应用程序上显示的所有数据 OWIN JWT身份验证已实现且工作正常。有一个端点/oauth2/token为用户提供一个令牌,所有端点都有[Authorize]属性过滤器来验证它 令牌expiration设置为5分钟 登录会话通过一个单独的会话ID进行维护,该ID存储在钥匙链中,也存储在服务器端以检查活动会话。每次用户登录应用程序时,都会生成一个新的令牌,用户可以访问API方法来获取数据 问题 如果用户让应用程序保持打开状态超过5分钟(令牌过期时间

我有一个
webapi
,它为用户提供了需要在我的移动应用程序上显示的所有数据

OWIN JWT身份验证已实现且工作正常。有一个端点
/oauth2/token
为用户提供一个令牌,所有端点都有
[Authorize]
属性过滤器来验证它

令牌
expiration
设置为5分钟

登录会话通过一个单独的
会话ID
进行维护,该ID存储在
钥匙链中,也存储在服务器端以检查活动会话。每次用户登录应用程序时,都会生成一个新的令牌,用户可以访问API方法来获取数据

问题 如果用户让应用程序保持打开状态超过5分钟(
令牌过期时间
),该怎么办?令牌已过期,将不可用,如何刷新它?我应该什么时候刷新它

我阅读了有关刷新令牌的内容,但不确定如何处理它们(这是正确的选择吗?),因为
[Authorize]
属性只会在令牌过期时拒绝我的呼叫,而不提供过期消息,我无法理解它是过期令牌还是无效令牌

如果用户打开应用程序的时间超过5分钟怎么办 (令牌到期时间)?令牌将不可用,因为它已被删除 过期了,如何刷新

如果我理解正确,您将令牌过期时间设置为5分钟,这意味着如果用户让应用程序打开超过5分钟,令牌将不再有效。实际上,用户必须重新登录才能获得新令牌

回到你的问题,在代币过期的那一刻,我的建议是你可以
显示登录页面,告诉用户他必须再次登录才能使用该应用程序

我不知道是否有其他方法获得新令牌,如果有,使用可能不必重新登录


此外,我还发现了一条可能有用的线索:

谢谢你的回答。我不希望用户再次登录,实际上,会话已经保持活动状态,我只需要知道何时以及如何刷新令牌,以避免出现用户不采取任何操作就打开应用程序的情况。这将导致令牌过期,用户将无法执行任何调用。如果用户在5分钟内调用任何api,令牌将刷新,对吗?确切地说,这是刷新令牌的一般想法。不知道它是否正确,但这就是它现在的实现方式。问题是如果用户在5分钟内没有采取任何行动。我认为应该使用计时器来计算时间,并每5分钟自动重复调用一个api,即使用户在5分钟内没有采取任何行动。如果你的应用程序中调用了其他api,那么最好重新启动计时器重新计数。对于移动应用程序来说,计时器不是太贵了吗?我不知道这是否是一个好的做法,我会寻找它,谢谢