在Windows驗證網站設定部分匿名存取
最近接連遇到幾次的需求:供內部使用的ASP.NET網站,全站使用Windows驗證,使用者以網域AD帳號登入,但網站包含少數API性質的ASHX、ASPX或MVC Action,提供其他系統呼叫整合。
此時問題來了,既為API性質,要求呼叫端程式用網域帳號登入徒增部署與管理的不便(需申請程式專用AD帳號、程式要綁特定式執行身分、每次改密碼時要記得修改)。對API而言,較理想的做法是開放Web API網頁匿名存取,改限制呼叫來源IP或採API Key等驗證機制進行安全管控。在不拆分Web Application前題下要達成這個目標有個基本要求:必須在啟用Windows驗證的IIS網站開放部分資料夾或路徑接受匿名存取。
方法不難,用下面的專案示範:(文章都寫完了,才發現MixAuth被我寫成FixAuth,XD)

有某個MVC專案,網站採Windows驗證,圖中黃色底線項目需開放匿名存取。我設計了幾個典型,開放匿名存取對象包含:MyApiController所有Action,HomeController的AllowAnonymous() Action,ForEveryone目錄下的Test.aspx(傳統WebForm)及Test.html。為驗證結果,可使用以下程式偵測是否為匿名,匿名時為False,Windows驗證時為True:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace FixAuth.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return Content("IsAuthenticated=" + Request.IsAuthenticated);
}
public ActionResult AllowAnonymous()
{
return Content("IsAuthenticated=" + Request.IsAuthenticated);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace FixAuth.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
return Content("IsAuthenticated=" + Request.IsAuthenticated);
}
public ActionResult AllowAnonymous()
{
return Content("IsAuthenticated=" + Request.IsAuthenticated);
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
Response.Write("IsAuthenticated=" + Request.IsAuthenticated);
Response.End();
}
</script>
<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
Response.Write("IsAuthenticated=" + Request.IsAuthenticated);
Response.End();
}
</script>
首先,網站必須「同時」開放匿名驗證及Windows驗證,

IIS設定方式

IISExpress設定方式
接下來在web.config動點手腳,由於網站接受匿名存取,故先在<system.web>中加入<authorization><deny users="?" /></authorization>,預設整個網站拒絕匿名存取。針對要開放匿名存取的部分,則使用<location path="URL路徑">包住<authorization><allow users="?" /></authorization>,針對特定URL正向表列宣告接受匿名存取。

基本上,這樣就已滿足「部分網頁採Windows驗證,部分網頁開放匿名存取」的要求。但有一點需要注意,當網站同時啟用匿名及Windows兩種驗證,靜態檔案(如:html、js、css、jpg、png、zip、pdf…)將套用匿名存取規則,不需要登入就能下載。若此一行為不符合專案的資安要求,則要再動點手腳。設定<system.webServer><module runAllManagedModulesForRequests="true">是最簡單的解法,但所有靜態檔案都透過ASP.NET管線處理效能稍差,在效能要求較高的情境,可參照以下方法針對特定路徑加入Handler設定,可對該路徑的靜態檔案啟用Windows驗證。

以上就是在Windows驗證網站部分開放匿名存取的做法,提供大家參考。
http://blog.darkthread.net/post-2015-12-15-mixed-anonymous-and-windows-auth.aspx
在Windows驗證網站設定部分匿名存取的更多相关文章
- js驗證網址URL格式
/^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)? ...
- Step by Step 設定 TFS 2012 Create Team Project 權限 - 避免 TF218017、TF250044
基本上權限的設定和 以往的 TFS 沒有什麼太大的差別 只是這次的權限設定畫面有略作些調整,我還是一併整理一下 當我們用 TFSSetup 的帳號安裝完 TFS 2012 後 想要在自已的電腦上用自已 ...
- Windows的免費hMailServer搭配SpamAssassin過濾垃圾郵件:安裝與設定
http://jdev.tw/blog/1677/hmailserver-with-spamassassin-sawin32 為了解決垃圾信泛濫的狀況,這兩天「跨界」測試了運行在Windows上的免費 ...
- [小技巧]設定Reporting Services 2008 發生報表管理員權限不足
转载 http://www.dotblogs.com.tw/dorlis.tsao/archive/2011/01/17/20860.aspx 在自己Windows 7 professional的電腦 ...
- ASP.NET MVC 4 部署到 Windows Azure 如何轉換時區設定
由於公司慢慢地開始將新的專案都移往 Windows Azure 雲端平台做網站代管,漸漸地也開始遇到一些小問題,這些問題在還沒上雲端之前通常不會發生,像我們這次遇到的問題就跟顯示時間有關.由於 Win ...
- 設定 Bootstrap/SASS/Bower/gulp (Windows平台)
請注意:在進行以下步驟前,你會需要先安裝git,可以參考這篇 git安裝教學 前言 時至今日,幾乎每個人都在討論bootstrap.less 或 sass.我們知道它們是比較新的前端技術,而且有開始愈 ...
- Iptables網路連線限制及攻擊防護和相關設定
[筆記整理]Iptables網路連線限制及攻擊防護和相關設定 1. 限制每個IP連接HTTP最大併發50個連接數 iptables -A INPUT -p tcp --dport 80 -m conn ...
- [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題
今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...
- 網站SSL加密原理簡介(2张图,握手有9个步骤,解释的很清楚)
Secure Socket Layer說明 SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸.最早是Netscape公司所提出,SSL的目 ...
随机推荐
- OpenJudge计算概论-寻找山顶
/*===================================== 寻找山顶 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请 ...
- HTML5之Canvas绘图实例——饼状图
实现饼状分布画图(如下):调试环境:Firefox
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- Extjs4.2.1中的helloworld
ExtJS最新正式版4.2.1下载地址:http://pan.baidu.com/s/1qWNt2kk (开发api文档:https://github.com/extjs-doc-cn/ext4api ...
- linux设置系统日期时间
设置当前日期: date -s 08/06/2015 设置当前时间:date -s 10:03:00 写入BIOS: clock -w 显示当前日期时间: date
- 结合MongoDB开发LBS应用
然后列举一下需求:1.实时性要高,有频繁的更新和读取2.可按距离排序支持分页3.支持多条件筛选(一个经纬度数据还包含其他属性,比如社交系统的性别.年龄) 方案简单介绍:1.sphinx geo索引支持 ...
- SQL SERVER 生成ORACLE建表脚本
/****** Object: StoredProcedure [dbo].[GET_TableScript_ORACLE] Script Date: 06/15/2012 13:07:16 **** ...
- mysql 进程状态(转)
通过show processlist查看MySQL的进程状态,在State列上面的状态有如下这些: Analyzing线程对MyISAM 表的统计信息做分析(例如, ANALYZE TABLE ).c ...
- Jar mismatch! Fix your dependencies的问题
在开发Android项目的时候,有时需要引用多个项目作为library.在引用项目的时候,有时会出现“Jar mismatch! Fix your dependencies”错误. 这是因为两个项目的 ...
- Python爬虫(图片)编写过程中遇到的问题
最近我突然对网络爬虫开窍了,真正做起来的时候发现并不算太难,都怪我以前有点懒,不过近两年编写了一些程序,手感积累了一些肯定也是因素,总之,还是惭愧了.好了,说正题,我把这两天做爬虫的过程中遇到的问题总 ...