2017-02-24 70 views
0

我使用VS2015創建了ASP.NET MVC Core(1.1.0)應用程序。在對話框中,我選擇了連接到Azure AD的選項,因此VS生成了樣板代碼,並且正如所料,該應用將我重定向到Microsoft的登錄頁面,在那裏我可以使用我的工作&學校帳戶登錄。用戶使用Azure Active Directory進行身份驗證後執行代碼

現在,用戶登錄後,服務第一頁(比如/ home/index)之前,我需要從用戶那裏獲得一些信息,這些信息是存儲在數據庫中的(例如顯示名稱,聯繫人諸如電子郵件,電話號碼,地址,用戶的照片等信息)。

我到目前爲止的想法是添加一個ControllerBase與檢索此信息的方法,然後通過ViewData將其傳遞給視圖。但是反覆查詢數據庫似乎效率不高。另一種方法是將此信息存儲在cookie中或會話狀態中,因此只能觸擊數據庫一次。但是必須依賴ControllerBase可能會導致錯誤(例如,如果在某些控制器方法中,人們忘記調用基本方法)並且感覺不到他們想要的方式。此外,如果用戶使用預定義路徑輸入URL(如www.myapp.com/Users/joedoe/Detail),則在家庭控制器上使用此功能可能會失敗。

我搜查,發現使用的OpenIdConnectOptions的事件屬性的參考對象傳遞到啓動類的應用程序生成器:

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions 
{ 
    ClientId = Configuration["Authentication:AzureAd:ClientId"], 
    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
    CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"], 
    Events = new OpenIdConnectEvents { 
     // 
    } 
}); 

然而,OpenIdConnectEvents類沒有一些「OnAuthenticationSucceeded」事件,它只有一個OnAuthenticationFailed,這不是我想要的,以及其他名稱似乎不是我正在尋找的回調。

所以,我的問題是,我應該使用OpenIdConnectEvents的回調是什麼,或者,連接到AAD的ASP.NET MVC Core應用程序的首選方式是在用戶通過身份驗證後捕獲事件?

在此先感謝。

回答

1

有各種各樣的OpenIdConnectEvents你可以掛鉤。看看SecurityTokenValidated。這會在用戶通過AAD驗證並且驗證令牌後觸發。在這裏,您可以查找數據庫中的數據並將自己的聲明添加到身份(如角色等)。

本示例將解析AAD中的組名,但概念相同 - 將額外數據添加到聲明集,並且您可以在整個應用程序中通過用戶主體訪問它。使用角色的ClaimType會讓你使用ASP.net現有的屬性(如Authorize(Role=...)屬性。

https://github.com/jpda/azure-ad-netcore-sample/blob/master/src/azure-ad-netcore-sample/Startup.cs

+1

謝謝約翰!有回調機能的研究設置OnTokenValidated財產的伎倆,如你所說。提供的例子非常好,我打算使用會話狀態,但聲稱看起來更好,就像你提供的例子一樣。再次感謝。 –

相關問題