2010-08-28 31 views
18

Tôi đang sử dụng xác thực biểu mẫu trong IIS7 để bảo vệ bằng mật khẩu một trang web dev, nhưng xác thực dường như được thông qua khi trang web chỉ chứa HTML tĩnh tệp + login.aspx + web.config.Làm cách nào để thực hiện Xác thực biểu mẫu trên các trang HTML thuần túy bằng ASP.NET?

Khi tôi đổi tên tệp thành .aspx, tôi được nhắc với biểu mẫu đăng nhập Tôi không làm gì lạ mắt. Tôi có một kịch bản đăng nhập rất đơn giản và nó chỉ cần chuyển hướng đến index.html sau đó.

Mọi đề xuất? Để tóm tắt, toàn bộ trang web đang sử dụng HTML (hiện tại) và cần được bảo vệ bằng mật khẩu.

<authentication mode="Forms"> 
    <forms name="appNameAuth" path="/" loginUrl="~/login.aspx" defaultUrl="index.html" protection="All" timeout="525600"> 
    <credentials passwordFormat="Clear"> 
     <user name="[user]" password="[password]" /> 
    </credentials> 
    </forms> 
</authentication> 
<authorization> 
    <deny users="?" /> 
</authorization> 

Trả lời

10

Để làm cho tệp HTML bị khóa bằng cách xác thực biểu mẫu, bạn cần chúng được ASP.NET phân phối. Bạn có thể làm điều này trong IIS bằng cách kết hợp (các) phần mở rộng bạn cần (ví dụ: .html, .htm, v.v.) với aspnet_isapi.dll.

Lực lượng ASP.NET đang phục vụ những tệp đó mà bạn có thể chỉ định quyền cho chúng giống như bất kỳ trang aspx nào.

Để biết thêm thông tin tham khảo MSDN:

Theo mặc định, IIS quá trình tĩnh nội dung riêng của mình - như các trang HTML và CSS và file hình ảnh - và chỉ tay tắt yêu cầu đến ASP.NET runtime khi trang có phần mở rộng là .aspx, .asmx hoặc .ashx được yêu cầu.

IIS 7, tuy nhiên, cho phép tích hợp đường ống IIS và ASP.NET. Với một vài cài đặt cấu hình bạn có thể thiết lập IIS 7 để gọi FormsAuthenticationModule cho tất cả yêu cầu . Hơn nữa, với IIS 7 bạn có thể xác định quy tắc ủy quyền URL cho tệp thuộc bất kỳ loại nào. Để biết thêm thông tin , hãy xem Thay đổi giữa IIS6 và Bảo mật IIS7, Nền tảng Web của bạn Bảo mật và Hiểu URL IIS7 Uỷ quyền.

Ngắn câu chuyện dài, trong các phiên bản trước IIS 7, bạn chỉ có thể sử dụng các hình thức xác thực để bảo vệ tài nguyên được xử lý bởi thời gian chạy ASP.NET. Tương tự, quy tắc ủy quyền URL là chỉ được áp dụng cho các tài nguyên được xử lý bởi thời gian chạy ASP.NET. Nhưng với IIS 7 nó có thể tích hợp FormsAuthenticationModule và UrlAuthorizationModule vào đường dẫn HTTP của IIS, do đó mở rộng chức năng này cho tất cả các yêu cầu.

1

Tôi đã giải quyết vấn đề tương tự cách đây vài ngày, bằng cách làm theo các bài bởi fr33m3 @ 2007/11/21, 15:19 trên chủ đề này: http://forums.asp.net/t/1184547.aspx làm theo tất cả các bước từ 2 đến 5. và bạn đã hoàn tất!

hy vọng điều này có thể giúp bạn thích nó đã giúp tôi.

+0

Bạn có thể tóm tắt thông tin trên SO trong trường hợp trang web khác biến mất. –

10

Trong IIS7 nếu bạn muốn bảo vệ các tệp * .html hoặc * .htm (hoặc các phần mở rộng không phải mạng khác) trong xác thực biểu mẫu, sau đó thêm các dòng sau vào trang web của bạn.cấu hình:

<compilation> 
    <buildProviders> 
     <add extension=".html" type="System.Web.Compilation.PageBuildProvider" /> 
     <add extension=".htm" type="System.Web.Compilation.PageBuildProvider" /> 
    </buildProviders> 
</compilation> 

<system.webServer> 
    <handlers> 
     <add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" /> 
     <add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" /> 
    </handlers> 
</system.webServer> 
+2

Tôi đã cố sử dụng tính năng này để phân phối các tệp Excel. Tuy nhiên, ASP.NET đã cố gắng để biên dịch các tập tin Excel và điều này đã đưa ra một lỗi cú pháp. – Sjoerd

1

Mặc dù đây là một câu hỏi cũ, tôi tìm liên kết trong câu trả lời của pomarc thực sự hữu ích. Dưới đây là tóm tắt phù hợp với IIS7.

Trong web.config của bạn, thêm hoặc sửa đổi <handlers> dưới <system.webServer>:

<handlers> 
    <add name="HTML" path="*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" resourceType="Unspecified" requireAccess="Script" /> 
</handlers> 

Thay verb giá trị với bạn cần một; scriptProcessor giá trị với đường dẫn chính xác của môi trường của bạn.

Sau đó, thêm hoặc sửa đổi <compilation><httpHandlers> dưới <system.web>:

<compilation debug="false" strict="false" explicit="true"> 
    <buildProviders> 
    <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)--> 
    <add extension=".html" type="System.Web.Compilation.PageBuildProvider" /> 
    </buildProviders> 
</compilation> 
<httpHandlers> 
    <!--Add below so .html file will be handled by ASP.NET (for use of Forms Authentication)--> 
    <add verb="GET, HEAD, POST, DEBUG" path="*.html" type="System.Web.UI.PageHandlerFactory" /> 
</httpHandlers> 

Thay verb giá trị với yêu cầu của bạn một.

Bạn cũng có thể bao gồm nhiều tiện ích hơn được phân tách bằng dấu phẩy ','

Các vấn đề liên quan