在同一服务器上使用多个Web服务进行身份验证

时间:2014-05-03 09:40:52

标签: c# web-services cookies iis-7.5 forms-authentication

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

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方法充当登录并使用...

返回表单身份验证cookie
FormsAuthentication.SetAuthCookie(user.UserName, false);

这似乎工作正常,如果使用适当的参数调用login方法,我只能访问使用[Authorize]属性保护的Service1方法。

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

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

如果是这种情况,我如何允许他们共享cookie?我无法找到任何方法来制作IIS"分享"这四个人的共同根源。

我尝试在所有四个服务中的web.config中设置以下内容......

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

...但它似乎没有帮助,我再次假设&#34; /&#34;不会跨应用程序进行映射。

我已经查看了很多与此相关的主题,但问题是我不确定问题到底在哪里,所以我不确定要搜索什么 - 没有表单身份验证帖子和我正在查看的主题正是处理这个问题,或者他们所包含的解决方案似乎并不适用于我。

任何指针都会被感激地接受。

1 个答案:

答案 0 :(得分:0)

终于找到了一些能够为我提供解决方案的东西,尽管是通过一条圆形路线。

我发现我需要在四个Web服务中将machineKey设置为相同的值,即添加...

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

...到所有web.config文件的system.web部分。我已经看过关于这个的东西但是打了折扣因为我在IIS的功能视图中没有机器密钥条目。

似乎它可能更容易发现这个,如果不是因为我的IIS没有出于某些奇怪的原因显示机器密钥条目这一事实 - 但这是另一天的另一个问题。一旦我意识到这是一个问题,并抓住一个代码片段来生成密钥,我就开始了。