先前曾介紹過自行架設NuGet Server的方法,而我一直覺得讓NuGet Server在企業內部作為開發團隊的程式庫/元件集散中心是很棒的點子,只要幾個點選動作就可將程式庫融合到現有專案中,極為方便,尤其自動版本更新的功能,更可解決程式庫開發人員在改過Bug或推出新版時,連該通知誰都不知道的困擾。

不過,架設自己的NuGet Server雖然簡單,我卻發現它在企業內部應用上的大罩門--NuGet在連線NuGet Server時不支援網站登入身分認證! 換句話說,NuGet Server必須開放匿名存取才能運作。擺放開發團隊程式庫的倉庫規定大門不能鎖,任何阿貓阿狗都可以晃進去拿個元件出把玩? 這顯然不符合企業應用的規範,因此依當時文章的結論,若要做到存取設限,還是應回歸網路分享資料夾的做法,但我深信支援網站登入並非技術障礙,只是時間早晚問題... 經過三個多月的時間,NuGet由1.3版推進到1.5版,開始支援網站認證囉!

有圖有真相。重新用1.5版的NuGet.Server程式包做一個NuGet Server網站放在另一主機IIS上,並取消匿名存取,接著在Visual Studio中新增一筆NuGet程式包來源設定指向該URL:

接下來,在專案叫出NuGet管理介面。(註: NuGet從1.4版起,將選單中"Add Library Package Reference…"更名為"Manage NuGet Packages…”,你甚至可在CodePlex上找到關於此一修改的討論 :P,這就是Open Source Project有趣的運作模式!)

從NuGet的管理介面,選取剛才新增的"企業內部NuGet Server"作為來源,因IIS設定不允許匿名存取,於是,輸入帳號/密碼的網站登入對話框出現囉!!

從此,我們便可以透過AD及IIS/Windows權限設定管控只有特定開發人員才能存取,使用NuGet Server儲放開發團隊共用程式庫元件的構想,又更具體可行了。


Comments

# by FrankWu

請問一下 你這邊把IIS的匿名存取關掉 還需要開啟其他的驗證機制嗎? 比方說Windows驗證 因為我的是IIS7 把匿名存取關掉,就所有驗證都沒有了 而且是會跳出視窗 可是那視窗我用那台電腦的本機帳號卻怎麼也登不進去

# by Jeffrey

to FrankWu, IIS7預設是不安裝Windows驗證的,請使用 控制台 / 開啟或關閉Windows設定,找到 Internet Information Services / World Wide Web服務 / 安全性,勾選"Windows驗證"後,才能使用AD帳號登入IIS。參考圖例: http://leoou.blogspot.com/2011/05/iis-75.html

# by Demo

確認SERVER端權限(預防IIS Windows認證錯誤returns 404) 控制台=>系統管理工具=>IIS=>網站=>預設的網站下=>Web專案=>右鍵內容=>執行權限=>設定=>萬用字元應用程式對應=>插入=>瀏覽=>加入 "c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll" 參考網址http://blogs.thesitedoctor.co.uk/tim/2011/09/02/Nuget+Server+On+IIS6+Returns+404+When+Downloading+Package+After+Upgrade.aspx

Post a comment