您好,登錄后才能下訂單哦!
最近項目要調用其他人的登錄API程序,其中涉及到了身份驗證(之前沒有用過ASP.NET的身份驗證),開始調試時身份驗證都是有值的,調試時
(PC-5\Administrator為本地計算機名字)
但是到了真正發布到IIS時,身份驗證的值卻沒有了。后來查看了一些文章,才發現這是和ASP.NET的身份驗證有關。
微軟官方對ASP.NET的身份驗證分為以下幾種,
<authentication
mode="[Windows|Forms|Passport|None]">
其中屬性描述為:
屬性 |
說明 |
||||||||||
mode |
必選的屬性。 指定應用程序的默認身份驗證模式。此屬性可以為下列值之一。
默認值為 Windows。 |
如果是使用身份驗證為Windows,由于官方說將結合IIS進行身份驗證,那么就要額外配置發布后的IIS,因為IIS默認為匿名用戶登錄,并不采用身份驗證。所以如果是本地進行調試的話,身份驗證就是使用本機的Windows身份,而發布到IIS的就是使用IIS的身份驗證,但是IIS如果未配置身份認證,默認采用匿名登錄,那么身份認證就不會起作用了。
測試代碼:
if (HttpContext.Current.User.Identity.IsAuthenticated)
Label1.Text ="已驗證,現在身份驗證名字:" +HttpContext.Current.User.Identity.Name;
else
Label1.Text="未驗證,現在身份驗證名字:" + HttpContext.Current.User.Identity.Name;
發布到IIS服務器沒有配置身份驗證,出現的結果:
發布到IIS服務器并配置身份驗證,會出現windows登錄窗口,輸入windows用戶,
出現的結果是
通過上面的測試,基本上可以明白微軟對ASP.NET的身份驗證的Windows屬性的使用。但是對于一般網站而言,并不希望為每個用戶分配windows賬戶,所以這種驗證僅適合少量安全用戶的訪問,并不適合大量的用戶訪問。
參考文獻:http://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html#_label5
http://msdn.microsoft.com/zh-cn/library/ff647076.aspx
針對上述情況,微軟提出了ASP.NET的身份驗證屬性Forms屬性,主要針對表單驗證。簡單說,Forms身份認證就是為每個登錄到網站的用戶產生一個認證標識(一般為Cookie)。由于這種認證集成到網頁表單的提交,對用戶很方便。
具體的認證使用方法請參看:
http://www.cnblogs.com/xugang/archive/2010/12/08/1900135.html
http://www.xoc.net/works/tips/forms-authentication.asp
在這里還想說的是,之前由于我做的程序中使用了User.Identity.IsAuthenticated屬性進行驗證,在調試的時候還是沒有產生身份驗證。追查原因才發現原來在進行表單身份驗證的時候是需要這個方法來產生表單驗證信息的,即注冊表單身份。
FormsAuthentication.SetAuthCookie(name, true);
沒有這個方法的話,就無法產生表單身份,而且根據文章
http://www.cftea.com/c/2011/04/UQ1T0SIOTD34ZJOG.asp
說注冊表單身份后要進行跳轉后才能生效。
而對于解決User.Identity.IsAuthenticated==false 或User.Identity.Name==string.empty的問題,可以參考文章
http://www.cnblogs.com/godwar/archive/2008/07/21/1247890.html
最后推薦各位遇到ASP.NET身份驗證的問題的朋友,可以先看看這幾篇文章,會很有收獲。
http://www.cnblogs.com/Gavinzhao/archive/2009/10/29/1591795.html
http://www.cnblogs.com/Gavinzhao/archive/2009/10/29/1591796.html
http://www.cnblogs.com/Gavinzhao/archive/2009/10/29/1591797.html
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。