我有一個使用窗體身份驗證的MVC 3網站。用戶登錄並導航到Silverlight 5應用程序。 Silverlight應用程序正在另一個端口上調用啓用Silverlight的WCF服務。由於我的要求之一是使用Https/SSL,我決定將WCF服務移動到我的MVC應用程序中的「服務」文件夾中。Silverlight,SSL,HTTPS,WCF,MVC和窗體身份驗證
要查看服務是否正常工作,我輸入了我的服務地址。我收到一條錯誤消息,指出我的服務需要匿名訪問,但指定網站使用表單身份驗證。所以,我在我的web.config中爲我的服務刪除了我的mexHttpBinding,並向我的綁定的httpTransport添加了authenticationScheme =「Negotiate」。 (我還沒有https)。
現在,我得到一個302,並被重定向到登錄頁面。看來,我的服務是在暗示我不會登陸,所以,我說
routes.IgnoreRoute("{resource}.svc/{*pathInfo}");
和
routes.IgnoreRoute("Services/");
但還沒有做出區別。我認爲該服務說我沒有通過身份驗證,但我確定我是。
有人可以解釋我做錯了什麼嗎?
當我在本地主機上進行調試時,所有這些工作都會生效,但是當我部署到服務器時,我無法訪問該服務。
編輯
我可能已經找到我的答案。我在IIS中爲我的網站啓用匿名訪問,並將httpTransport的authenticationScheme更改爲默認(匿名)。然後我加入
<authorization>
<deny users="?"/>
</authorization>
與
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
,這似乎是要求以訪問服務進行認證的用戶一起。我現在要檢查我的Silverlight應用程序以確保它可以訪問服務並獲取/發佈數據。這全部都在測試應用程序中,所以我必須相應地更改我的實際應用程序。然後,我會解決ssl/https。
這一切聽起來是對的嗎?
EDIT 2
我必須確保MEX啓用和aspNetCompatibilityEnabled被設置爲「假」,讓conctracts在我的Silverlight應用程序更新。但是在更新我的服務之後,我將aspNetCompatibilityEnabled設置爲'true',並且一切似乎都正常。
我希望我還在領導下在正確的道路......
您的服務文件夾將繼承您的MVC應用程序的所有設置。在IIS管理器中,如果您打開您的應用程序並導航到您的服務目錄並打開認證,它是否會顯示「啓用匿名認證」?爲什麼不把它作爲自己的應用程序呢? – pms1969
@ pms1969,我真的是一個新手,所以我有點困惑,我將如何完成它作爲自己的應用程序,並得到它在ssl端口443響應。另外,我創建了一個「hello,world」網站來簡化我的問題。它確實啓用了匿名訪問,但是我的web.config指定了表單身份驗證。另外,我關閉了集成Windows身份驗證。 –
您應該再次考慮一下WCF服務的安全性。看起來他們可以在沒有任何身份驗證和權限檢查的情況下爲每個人打電話。 – paramosh