我有一個Forms Authenticated Web應用程序,但是我需要基本身份驗證,這些服務都位於特定路徑(即「〜/ Services /」 )。表單在特定文件夾/路徑上使用基本身份驗證驗證的Web應用程序
我最初試圖在web.config有一個單獨定製的MembershipProvider添加標籤的路徑,像這樣:
<location path="Services">
<system.web>
<authentication mode="None" />
<authorization>
<deny users="?" />
</authorization>
<membership defaultProvider="ServicesMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="Company.WebProject.DeviceMembershipProvider" connectionStringName="DefaultConnectionString" applicationName="/" />
</providers>
</membership>
<httpModules>
<add name="BasicAuthentication" type="Company.WebProject.BasicAuthenticationModule" />
</httpModules>
</system.web>
</location>
但是,這是引發錯誤:
這是一個錯誤在應用程序級別之外使用註冊爲allowDefinition ='MachineToApplication'的部分。此錯誤可能是由於虛擬目錄未被配置爲IIS中的應用程序。
因此,我意識到我不允許在location元素中使用身份驗證元素。
在閱讀this文章後,我嘗試連接Global.asax中的FormsAuthentication_OnAuthenticate方法。由於我需要使用基本身份驗證,因此我嘗試返回401以提示瀏覽器提供基本身份驗證憑據。不幸的是,這似乎是導致重定向到頁面上的表單身份驗證日誌(即loginUrl)。
public void FormsAuthentication_OnAuthenticate(object sender, FormsAuthenticationEventArgs e)
{
string path = VirtualPathUtility.ToAppRelative(e.Context.Request.Path);
if (path.Contains("/Services/"))
{
e.Context.Response.StatusCode = 401;
e.Context.Response.AddHeader("WWW-Authenticate", string.Format("Basic realm=\"{0}\"", "CompanyRealm"));
e.Context.Response.End();
}
}
所以現在我已經爲如何在通過身份驗證的Web應用程序窗體文件夾上實現基本驗證江郎才盡。
有沒有人有任何想法如何實現這一目標?
感謝您的迴應,雖然如果你谷歌它,你會發現網上有幾個解決方案混合形式認證和Windows身份驗證。不幸的是,我需要Forms Auth和Basic Auth(而不是Windows Auth)。我知道我可以創建單獨的應用程序,但這不是我理想的解決方案。 – 2012-07-19 16:01:41