2016-04-26 44 views
-1

我目前正在用ASP.NET Azure AD登錄完成我的ASP.NET MVC網站。Asp.net MVC azure廣告組標識

對於本網站,某些頁面只能由管理員訪問。對於這一點,我做了的命名testAdmins一個新的小組,當我檢查,如果用戶可以訪問一個網頁,我用這個:

ClaimsPrincipal principal = User as ClaimsPrincipal; 

if (principal.Claims.Any(x => x.Type == "groups" && x.Value == "id of testAdmins")){ //code } 

而且它的正常工作與我的用戶女巫這一組。

但是,當我將testAdmins的ID更改爲真實組管理員的值(Admins)時,我將在網站將部署時使用,並且我不在時,服務器不顯示任何內容爲40秒,然後我得到這樣的信息:

類型的異常「System.Web.HttpException」發生在 System.Web.dll中但在用戶代碼中沒有處理

其他信息:無法連接到SQL Server數據庫。

有人能解釋我發生了什麼事嗎?

在此先感謝

PS:我做了一些更多的測試...當我的用戶是該組中它的工作速度快,但時,它不是需要2分鐘,並做了錯誤信息......如果有人爲不知道有什麼問題,有沒有人有辦法讓來自用戶的不同訪問權限在Azure Active Directory的特殊組中?

回答

0

提供整個堆棧跟蹤和相關源代碼行(完整的堆棧跟蹤包含文件名和行號!)。您面臨的問題對於入職開發者(入門到ASP.NET 4.0+)非常普遍。

您的項目基於ASP.NET 4.0(或更高版本)的默認項目模板,默認情況下會使用「本地用戶帳戶」創建網站。該模板爲用戶認證/授權創建實體框架數據庫上下文和本地模型。這也會在你的web.config中創建一些設置來爲EF定義connectin字符串(或指示默認的)。

除此之外,您還可以通過右鍵單擊菜單(配置Azure AD身份驗證 - 在VS 2015中可用)或手動添加一堆NuGet包來添加嚴重的Azure AD身份驗證詳細信息。因此,您(不知道)是否創建了由本地帳戶規定的FBA(基於表單的身份驗證)以及由Azure AD身份驗證規定的OpenID Connect。

SQL Server錯誤來自FBA(或本地用戶帳戶設置)配置。並沒有簡單的方法將其刪除。

因爲我看到你只是玩弄和測試的東西,我會熱烈地建議你重新開始一個新的項目,並注意你的嚮導的第二步(在VS 2013和VS 2015都可用) - 點擊「更改身份驗證」,並選擇「無驗證」:

enter image description here

在這個乾淨的項目,你可以添加你Azure的AD身份驗證,一切都將工作,你不會看到任何SQL Server錯誤(很好取決於您如何配置您的Azure AD Auth - 一些wizzards - 即多租戶之一也創建EF上下文)。

+0

Omg真的嗎?你確定嗎?因爲如果我在小組中,它是行得通的......也許他看起來太過分了,因爲'principal.Claims.Any(x => x.Type ==「groups」&& x.Value = =「testAdmins的id」)'太大了? – MrPixel6

+0

ClaimPricipal的聲明屬性是由OpenID Connect Owin中間件初始化的收集屬性。當您查詢此屬性時,無法訪問任何數據庫。而且它不會造成超時。去看看關於ClaimsPrincipal和它的Claims屬性的文檔,mrPixel!您還可以執行一些JustDecompile來檢查ClaimsPrincipal類型,並親眼看到沒有調用DB。 – astaykov

+0

好的,謝謝你的幫助! – MrPixel6