我在Web应用程序中使用ASP.Net Identity 2.2,它工作得很好。ASP.Net Identity 2.0无人参与登录
我想要做的是有一个后台服务访问Web应用程序,以生成一些页面的缩略图和/或PDF。此服务最终可能会在w3wp.exe进程中运行,并且会由用户发出的某些Web请求触发,例如,用户改变一些设置并且触发后台服务以重新生成缩略图。
问题是允许后台服务访问页面而不打开其他人可以用来访问页面的后门。目前我的代码可以从Web请求中复制认证Cookie,并使用它们请求页面并生成缩略图,但是我需要能够在没有任何现有连接的情况下复制Cookie。它需要能够获得自己的cookie。
我用来生成PDF /缩略图的库通过向Web服务器发出正常的Web请求并使用无头浏览器来工作。我需要浏览网页服务器,因为页面包含大量的javascript和ajax,因此静态页面很难生成。
理想情况下,它应该使用网络上没有人可以登录的“系统”用户。
我不想以可以快速解码的形式(所有密码都在数据库中散列)存储用户的密码。
有没有人有任何想法如何做到这一点?
我的想法是,如果有一种可靠的方法来识别请求来自缩略图服务,那么服务器可以调用signin()函数而不需要密码,但这本身当然是一个难题因为我们希望防止在服务器上运行Web浏览器的人员绕过安全措施。我不是在想也许是一个共享(一次性使用)的秘密,但不知道这是否可以安全地完成。
您可以为后台服务创建另一个用户并为其设置角色,如BackgroundServiceApp角色。比你写api只有这个角色可以访问,然后你的服务使用这个userAccount登录和访问它自己的应用程序api,它可以获取用户信息。如果您使用的是Azure,则可以查看https://msdn.microsoft.com/en-us/library/azure/dn798668.aspx,也可以使用Azure队列或Amazon Simple Queue。 – Miguel
由于我们试图生成与用户在其屏幕上看到的内容相同的缩略图/ PDF,所以单独的API不是我们想要采用的路线,因此服务访问与用户相同的页面是有意义的,因此减少工作重复,即在流水线的末端增加一个额外的步骤,而不是让两个不同的流水线访问相同的数据。 – Mog0
@ Mog0现在,一种常见的方法是首先构建一个API,然后让您的UI和任何其他自动化服务使用相同的API访问数据。这样你就可以避免你刚才描述的重复问题。如果你已经构建了你的用户界面,显然不会有太大帮助,但只是想我会提到它的未来。 – ADyson