昨天有朋友問我一個 ASP.NET 的問題,他說他利用 FormsAuthentication.Authenticate 方法驗證使用者帳號、密碼,而且在 web.config 中設定了使用者的登入帳號、密碼,密碼直接用「明碼」表示,但卻怎樣都無法登入成功,這時我就想到應該是他忽略 web.config 中 credentials 的預設屬性值。
他的 web.config 中的 credentials 設定如下:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="/login.aspx">
<credentials>
<user
name="UserName1"
password="PlainTextPassword"/>
</credentials>
</forms>
</authentication>
</system.web>
</configuration>
他忽略了 credentials 中的 passwordFormat 屬性預設值為 SHA1 編碼,並不是 Clear (明碼),所以才會永遠登入失敗。
像是這類的預設值,我通常不會上 MSDN 查詢,而是直接開啟 .NET Framework 中所附的一個 web.config 預設說明檔,用這個檔案來查詢各種參數的預設值非常的快速,不用上網就能查,而且每台有安裝 .NET Framework 的電腦都有。預設檔案路徑如下:
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config.comments
這個檔案除了可以看見 web.config 的所有預設屬性值外,還可以看見所有屬性可能出現的所有選項值,只要你對該設定有一定程度的瞭解,通常就可以一目了然的立即反應你可以設定的值,不用每次都上網閱讀龐雜的 MSDN 文件。如下圖示:
以我朋友問我的問題來說,只要將 web.config 修改成如下的設定即可:
<configuration>
<system.web>
<authentication mode="Forms">
<forms loginUrl="/login.aspx">
<credentials passwordFormat="Clear">
<user
name="UserName1"
password="PlainTextPassword"/>
</credentials>
</forms>
</authentication>
</system.web>
</configuration>
相對的,除了 web.config.comment 可以進行查閱外,對於整台主機預設的 machine.config.comments 設定檔也可以在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 目錄下找到,都可以做為開發時期方便的參考依據。
相關連結