代码之家  ›  专栏  ›  技术社区  ›  chobo2

是否将Windows服务与Web API连接?

  •  0
  • chobo2  · 技术社区  · 6 年前

    我目前有一个网站(reactjs)和一个asp.net核心api。现在,我核心api中的所有端点都受“authorization”标记的保护。用户将登录并发出令牌/刷新的令牌,这将在每个请求中发送。

    现在我正在构建一个需要访问我的数据库的windows服务。我不认为这个服务直接访问数据库是个好主意,我认为最好有一个可以访问数据库的端点(即web api)。

    这现在让我弄清楚我的windows服务将如何连接到我的api。我唯一能想到的方法是让一个假用户登录,然后每当我的服务需要连接到api时,它就会发送这个令牌。

    否则我想我得做一些api键什么的?

    0 回复  |  直到 6 年前
        1
  •  0
  •   cl0ud    6 年前

    所以如果我们在讨论解决方案-我会在下面给你一个建议。

    真正的问题是确保您的核心api理解传入的请求是有效的,而不必对api的当前形式进行过多的重构。

    您使用api密钥的想法是我想做的事情,您可以在api中编写一个中间件,从windows服务发送的头中读取api密钥,验证它,然后生成一个有效的jwt令牌并将其添加到请求头中。一旦请求到达mvc层,它将包含一个有效的jwt令牌并传递auth头。

    这就带来了复杂性,因为必须在数据库中维护一组api密钥,并在请求级别验证它们。这意味着发送的每个请求都必须经过这个过程,并对密钥进行数据库查找。

    为了减轻这种情况,我将添加另一个报头,指示传入的请求来自用户(签入中间件)以外的另一个源,并可能在一组api密钥上添加一个缓存实现,以将它们保存在内存中以减少查找。

    如果您的windows服务需要做与用户完全相同的事情,那么上面的场景将非常有用。

    如果它的不同逻辑没有什么可以阻止您使用您可以为该控制器定义的自己的授权策略为您的服务滚动带有定制端点的新控制器。然后,该控制器将负责为windows服务(或其他组件)提供服务。