如何在没有声明的情况下在API之间保存令牌?

时间:2019-04-03 08:26:22

标签: c# .net api jwt

我们正在考虑下一个应用程序的体系结构,并且在api之间传递令牌时遇到了问题。我们将拥有:

  • 前端->(调用)自己的登录api(如果一切正常,我们创建一个自己的令牌,命名为ownToken)->(调用)第三方api->返回一个JWT令牌(名为1token)- ->

一切正常之后:

  • 前端->用户执行一些任务->(使用ownToken调用)自己的业务api(如果ownToken可以,则执行一些操作)->(使用1token调用)第三方api(返回一些操作) )->向用户显示信息。

我们希望避免每次从该api获取信息时都调用第三方api,但是我们也不想向用户显示JWT(我的意思是localstorage,sessionstorage ...)。

有关更多信息,我们将使用c#语言和sql server作为数据库。

我们的问题:

如何在API之间维护1个令牌?

1 个答案:

答案 0 :(得分:3)

您有两个不同的东西需要管理:

  1. 在前端和后端之间通过JWT保护的呼叫
  2. 您的后端和第三方之间通过JWT保护的呼叫。

我要做的只是在后端生成一个“ sessionId”,这是您发送到前端的令牌的一部分。这可以是int或guid或其他任何形式。

然后我将这个'sessionId'与从第三方获取的令牌相关联并以某种方式存储该令牌-某种形式的数据库或文件存储(很明显,可以使用DB)。

这样,无论何时从后端代码中的前端发出请求,您都应该:

  1. 从他们提供的令牌中提取sessionId
  2. 在数据库中查找此ID的条目以获取与其关联的令牌
  3. 使用此令牌进行所需的任何呼叫并做出响应

每当需要获取新令牌时,您都必须确保更新此关联,但这应该不太困难。

您还可以使用它来使事物的性质更加不同步-您可以立即返回您的前端,并返回一条提示,表明它是“ Working On It”,然后前端可以稍后再调用一个单独的端点以获取结果...这样,如果第3方链接花费了一段时间,则原始请求不会等待太长时间而无法获得响应...