我目前有一个网站(reactjs)和一个asp.net核心api。现在,我的核心api中的所有端点都受到“授权”标签的保护。用户将登录并发行令牌/刷新令牌,并将其发送给每个请求。
现在,我正在构建需要访问数据库的Windows服务。我真的认为直接访问数据库对于此服务不是一个好主意,我认为最好有一个可以访问数据库的端点(即Web api)。
这现在使我想出Windows服务将如何连接到我的api。我能想到的唯一方法是让一个假用户登录,然后每次我的服务需要连接到api时,它将发送该令牌。
否则我想我必须做出某种api键之类的事情?
答案 0 :(得分:0)
因此,如果我们正在讨论解决方案-id在下面为您提供了一个建议的解决方案。
真正的问题是确保您的核心api知道传入的请求是有效的,而不必过多地以当前形式重构API。
您对API密钥的想法是我要做的事情,您可以在API内编写一个中间件,该中间件将从Windows服务发送的标头中读取Api密钥,进行验证,然后生成有效的JWT令牌并添加它到请求标头。该请求到达MVC层后,它将包含有效的JWT令牌并传递Auth头。
这通过必须在数据库中维护一组API密钥并在请求级别进行验证来引入复杂性。这意味着发送的每个请求都必须经过此过程,并对键进行数据库查找。
为减轻这种情况,我将添加另一个标头,以指示传入的请求来自用户以外的其他来源(已在中间件中检查),并可能在api键集上添加了一个缓存实现,以将其保留在内存中以减少查找
如果您的Windows服务需要执行与用户完全相同的操作,则上述情况将很有用。
如果它的逻辑不同,则不会阻止您使用自己的授权策略为您的服务推出带有定制端点的新控制器,该授权策略可以为该控制器定义。然后,该控制器将负责为Windows服务(或其他组件)提供服务。