C# ASP.Net Identity 2.0无人参与登录

C# ASP.Net Identity 2.0无人参与登录,c#,asp.net,asp.net-identity,asp.net-identity-2,C#,Asp.net,Asp.net Identity,Asp.net Identity 2,我在一个web应用程序中使用ASP.NETIdentity2.2,它工作得很好 我想做的是有一个访问web应用程序的后台服务,以便生成一些页面的缩略图和/或PDF。此服务可能最终在w3wp.exe进程中运行,并由用户发出的某些web请求触发,例如,用户更改某些设置,并触发后台服务以重新生成缩略图 问题是允许后台服务访问页面,而不打开其他人可以用来访问页面的后门。目前,我有代码可以从web请求复制身份验证cookie,并使用它们来请求页面和生成缩略图,但我需要能够在没有任何现有连接的情况下从中复制

我在一个web应用程序中使用ASP.NETIdentity2.2,它工作得很好

我想做的是有一个访问web应用程序的后台服务,以便生成一些页面的缩略图和/或PDF。此服务可能最终在w3wp.exe进程中运行,并由用户发出的某些web请求触发,例如,用户更改某些设置,并触发后台服务以重新生成缩略图

问题是允许后台服务访问页面,而不打开其他人可以用来访问页面的后门。目前,我有代码可以从web请求复制身份验证cookie,并使用它们来请求页面和生成缩略图,但我需要能够在没有任何现有连接的情况下从中复制cookie。它需要能够得到自己的饼干

我用来生成PDF/缩略图的库通过向web服务器发出普通的web请求并使用无头浏览器来工作。我需要浏览web服务器,因为页面包含大量javascript和ajax,因此很难生成静态页面

理想情况下,它应该使用一个“系统”用户,网络上没有人可以作为其登录

我不想将用户的密码存储在一个可以重新解码的表单中(所有密码都在数据库中散列)

有人知道怎么做吗


我的想法是,如果有一种可靠的方法来识别来自缩略图服务的请求,那么服务器可以只调用signin()函数而不需要密码,但这本身当然是一个难题,因为我们希望防止在服务器上运行web浏览器的人绕过安全性。我不认为这可能是一个共享(一次性使用)秘密,但不确定这是否足够安全。

您可以让服务与web服务的特定用户一起运行,然后允许该用户访问您网站的指定资源,并在
web.config
中添加类似的内容:

<location path="yourdomain/yourresource">
  <system.web>
    <authorization>
      <allow users="domainname\user" />
      <deny users="*" />
    </authorization>
  </system.web>
</location> 


这样,您就不必创建一个业务价值为零的假用户,也不必在您的服务中硬编码或配置用户名和密码。

这是一个有趣的想法,但我们的许多客户都需要在其IIS设置中禁用windows集成身份验证,因此我认为在这些情况下不起作用,也就是说,Web应用程序不知道请求的Windows用户。因此,我认为您应该考虑在您的服务中配置或硬编码用户和密码,因为在某种程度上,您的服务将不得不对您的Web进行身份验证。app@Mog0另一个想法可能是;你可以有一个需要身份验证的网站,另一个不需要身份验证的网站(有IP限制),只有你的服务才能访问。但老实说,我不会这么做。我不想走IP限制的道路,因为可以在服务器上运行web浏览器的人可以在不经过身份验证的情况下访问数据。额外的配置是不可取的,因为我们的应用程序部署在许多不同的客户站点上,我们不想进一步增加支持负载,支持客户安装/配置产品。@Mog0我同意你的看法,出于好奇,请告诉我,一旦您决定您可以为后台服务创建另一个用户并为其设置角色(如BackgroundServiceApp角色),您将做出什么选择。然后编写api,其中只有此角色可以访问,并且在该api中,您的服务稍后使用此userAccount登录并访问其自己的应用程序api,以获取用户信息。如果您使用的是Azure,您可以检查,也可以使用Azure队列或Amazon Simple Queue。我们不希望使用单独的API,因为我们正在尝试生成与用户在屏幕上看到的内容相同的缩略图/PDF,这样服务就可以访问与用户相同的页面,从而减少重复工作,也就是说,只需在管道的末端增加一个步骤,而不是让两个不同的管道访问相同的数据。@Mog0现在的一种常见方法是先构建一个API,然后让您的UI和任何其他自动化服务使用相同的API访问数据。这样可以避免刚才描述的复制问题。显然,如果你已经构建了你的用户界面,这对你没有多大帮助,但我想我会在将来提到它。@ADyson我同意,但我们正在为一款超过10年的产品添加一个新的界面,有很多传统的东西。另外,我们正在尝试复制演示文稿和数据,因此在这种情况下,使用无头浏览器拍摄快照是有意义的,这只是在没有实际用户参与的情况下如何安全地执行此操作。