繁体   English   中英

如何使用基本身份验证来访问从Windows服务使用Windows身份验证的Asp.Net MVC 4 Intranet Web API方法?

[英]How to use Basic Authentication to access Asp.Net MVC 4 Intranet Web API method which uses Windows Authentication from a Windows Service?

这是一些背景!

我使用默认的Intranet模板开发了一个小的Asp.Net MVC 4 Intranet站点,并且正在使用Windows Authentication 我还添加了一个Web Api Controller并在其中编写了一些REST服务方法,我可以从站点页面使用JQuery进行访问。 Web.Config包含以下内容:

<authentication mode="Windows" />
<authorization>
    <deny users="?" />
</authorization>

该站点运行良好,需要用户提供Windows Credentials才能访问该站点。

问题

我还正在开发Windows服务,该服务将在网络上的另一台计算机上运行,​​并将访问我在上一步中创建的Windows API controller的操作之一。 现在的问题是,我无法从Windows服务中向RESTful API方法提供Windows Credentials ...因为没有用户可以使用该系统...我希望您能理解我的意思:

我尝试了什么

  1. Web项目的属性中允许Anonymous AuthenticationTrue 然后在网络api方法上使用AllowAnonymous属性。 不工作。
  2. 我为什么不创建另一个AuthorizationFilterAttribute ,它仅应用于将要从Window Service访问的API方法。 这样,新功能将覆盖现有的Windows Authentication功能,并且我能够为BASIC身份验证提供我选择的用户名/密码,该用户名/密码只能在Windows服务中使用。 因此,我在Rick Strahl的博客的帮助下创建了一个新的AuthorizationFilterAttribute类。

     [AllowAnonymous] [AuthorizeCallFromWindowsService] public IssueResponse CloseEmployeeLicenses(int userID) { return null; } 

同样,这没有用。 该API方法需要相同的Windows身份验证凭据,我想使用自定义的硬编码用户名/密码。

你会提出什么? 提前致谢。

我有一个类似的场景,我决定在我们的应用程序中创建一个新的用户类型,称为服务用户。 我们在域中创建了一个服务帐户,当我们在服务器(位于同一网络中)上安装Windows服务时,我们强制Windows服务作为服务帐户(具有网络域\\用户名和密码)运行。 实际上,我们在应用程序中创建了3个服务帐户,每个帐户分别针对每个环境:ServiceAccountDev,ServiceAccountUAT和ServiceAccountPROD,并在适当时禁用/启用了每个帐户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM