我使用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应用程序的首选方式是在用户通过身份验证后捕获事件?
在此先感谢。
谢谢约翰!有回调机能的研究设置OnTokenValidated财产的伎俩,如你所说。提供的例子非常好,我打算使用会话状态,但声称看起来更好,就像你提供的例子一样。再次感谢。 –