在同一服务器上使用多个Web服务的表单身份验证

本文关键字:Web 服务 身份验证 表单 服务器 | 更新日期: 2023-09-27 18:01:33

我有四个c# 4.5 MVC RESTful web服务运行在IIS 7.5下的一台服务器上,我可以像这样访问…

http://1.2.3.4:5/Service1/Controller/Method
http://1.2.3.4:5/Service2/Controller/Method
http://1.2.3.4:5/Service3/Controller/Method
http://1.2.3.4:5/Service4/Controller/Method

其中一个可用的Service1方法充当登录并使用…返回一个Forms Authentication cookie

FormsAuthentication.SetAuthCookie(user.UserName, false);

这似乎工作得很好,我只能访问使用[authorization]属性保护的Service1方法,如果登录方法已经用适当的参数调用。

我不能理解的是为什么我不能调用任何具有[授权]属性集的Service2/3/4方法-所有服务都在同一服务器上使用相同的IP和端口,它们仍然被视为不同的服务并且不能使用相同的cookie吗?

登录返回的cookie中的路径是"/",但我猜这只是相对于服务的根,因此Service1的"/"与Service2/3/4的"/"不一样。

如果是这样的话,我怎么能让他们都共享饼干呢?我看不出有什么办法能让IIS为它们四个"共享"一个共同的根目录。

我尝试在web上设置以下内容。配置所有四个服务…

<forms enableCrossAppRedirects="true" domain="1.2.3.4" protection="All" path="/"/>

…但它似乎没有帮助,我再次假设"/"没有映射到应用程序。

我已经看了不少与此相关的主题,但麻烦的是,我不确定问题到底在哪里,所以我不完全确定要搜索什么-我看过的表单认证帖子和主题都没有处理这个问题,或者它们包含的解决方案似乎不适合我。

在同一服务器上使用多个Web服务的表单身份验证

终于找到了一个解决方案,尽管是迂回的路线。

我发现我需要在四个web服务中将machineKey设置为相同的值,即add…

<machineKey validationKey="5B23............................944D"
            decryptionKey="E008.......686E"
    validation="SHA1"/>

…对系统。网页部分的所有网页。配置文件。我看到过这方面的东西,但没有考虑,因为我在IIS的功能视图中没有机器键项。

如果不是因为我的IIS由于一些奇怪的原因没有显示机器密钥条目,

看起来可能会更容易发现这一点-但这是另一个问题。一旦我意识到这是一个问题,并抓取代码片段来生成密钥,我就开始工作了。