最近接連遇到幾次的需求:供內部使用的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驗證網站設定部分匿名存取的更多相关文章

  1. js驗證網址URL格式

    /^((ht|f)tps?):\/\/([\w\-]+(\.[\w\-]+)*\/)*[\w\-]+(\.[\w\-]+)*\/?(\?([\w\-\.,@?^=%&:\/~\+#]*)+)? ...

  2. Step by Step 設定 TFS 2012 Create Team Project 權限 - 避免 TF218017、TF250044

    基本上權限的設定和 以往的 TFS 沒有什麼太大的差別 只是這次的權限設定畫面有略作些調整,我還是一併整理一下 當我們用 TFSSetup 的帳號安裝完 TFS 2012 後 想要在自已的電腦上用自已 ...

  3. Windows的免費hMailServer搭配SpamAssassin過濾垃圾郵件:安裝與設定

    http://jdev.tw/blog/1677/hmailserver-with-spamassassin-sawin32 為了解決垃圾信泛濫的狀況,這兩天「跨界」測試了運行在Windows上的免費 ...

  4. [小技巧]設定Reporting Services 2008 發生報表管理員權限不足

    转载 http://www.dotblogs.com.tw/dorlis.tsao/archive/2011/01/17/20860.aspx 在自己Windows 7 professional的電腦 ...

  5. ASP.NET MVC 4 部署到 Windows Azure 如何轉換時區設定

    由於公司慢慢地開始將新的專案都移往 Windows Azure 雲端平台做網站代管,漸漸地也開始遇到一些小問題,這些問題在還沒上雲端之前通常不會發生,像我們這次遇到的問題就跟顯示時間有關.由於 Win ...

  6. 設定 Bootstrap/SASS/Bower/gulp (Windows平台)

    請注意:在進行以下步驟前,你會需要先安裝git,可以參考這篇 git安裝教學 前言 時至今日,幾乎每個人都在討論bootstrap.less 或 sass.我們知道它們是比較新的前端技術,而且有開始愈 ...

  7. Iptables網路連線限制及攻擊防護和相關設定

    [筆記整理]Iptables網路連線限制及攻擊防護和相關設定 1. 限制每個IP連接HTTP最大併發50個連接數 iptables -A INPUT -p tcp --dport 80 -m conn ...

  8. [转]解決 IE10 瀏覽器無法使用 ASP.NET 表單驗證登入的問題

    今天凌晨在客戶端上線,當程式佈署到正式機後發現我們的網站唯獨只有 IE10 瀏覽器無法成功登入,任何其他瀏覽器版本或使用較低的 IE 版本都可以正常登入,使用 IE 相容性檢視也都可以正常登入,想說會 ...

  9. 網站SSL加密原理簡介(2张图,握手有9个步骤,解释的很清楚)

    Secure Socket Layer說明 SSL是Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸.最早是Netscape公司所提出,SSL的目 ...

随机推荐

  1. python模块结构和布局

    用模块来合理的组织你的python代码是简单又自然的方法.下面介绍一种非常合理的布局: #(1)起始行(Unix) #(2)模块文档 #(3)模块导入 #(4)变量定义 #(5)类定义 #(6)函数定 ...

  2. jquery得到iframe src属性值的方法

    这篇文章主要介绍了jquery得到iframe src属性值的方法,很简单,很实用,需要的朋友可以参考下 取得iframe src属性的的值: Html代码 <!DOCTYPE HTML> ...

  3. C# Post方式传输报文,和处理响应

    public string DoPost(string url, string data) { HttpWebRequest req = GetWebRequest(url, "POST&q ...

  4. linux概念之进程分析

    http://blog.csdn.net/kevinx_xu/article/details/8178746 /proc 详解 内核线程分析报告 进程层次 [root@109-com1 scripts ...

  5. docker nodejs 基本应用

    1. 安装docker 环境 2. nodejs  应用布局 package.json { "name": "docker-centos-hello", &qu ...

  6. How to send Email using C#

    try { MailMessage mail = new MailMessage(); SmtpClient SmtpServer = new SmtpClient("smtp.gmail. ...

  7. 手机App开发

    /* * 登录:输入 */ public void login(String user, String pwd, TextHttpResponseHandler responsehandler) { ...

  8. phonegap 2.7 ios配置安装详细教程(2.9通用)

    原地址:http://www.cnblogs.com/yansi/archive/2013/05/14/3078222.html 在移动开发日益激烈的情况下我也不得不硬着头皮尝试下新鲜的html5的a ...

  9. HackerRank "Array and simple queries" !

    The most interesting, flexible and juicy binary tree problem I have ever seen. I learnt it from here ...

  10. android 插件化开发 开源项目列表

    开源的插件化框架 Qihoo360/DroidPlugin CtripMobile/DynamicAPK mmin18/AndroidDynamicLoader singwhatiwanna/dyna ...