【发布时间】:2017-02-24 22:54:12
【问题描述】:
我使用 VS2015 创建了一个 ASP.NET MVC Core (1.1.0) 应用程序。在对话框中,我选择了连接到 Azure AD 的选项,因此 VS 生成了样板代码,正如预期的那样,应用程序将我重定向到 Microsoft 的登录页面,我可以使用我的工作和学校帐户登录。
现在,在用户登录之后,在提供第一页之前(例如,/home/index),我需要从用户那里获取一些我存储在数据库中的信息(例如显示名称、联系信息例如电子邮件、电话号码、地址、用户照片等)。
到目前为止,我的想法是添加一个带有检索此信息的方法的 ControllerBase,然后通过 ViewData 将其传递给视图。但是一遍又一遍地查询数据库以获取此信息似乎效率低下。另一种方法是将此信息存储在 cookie 或会话状态中,因此只访问数据库一次。但是必须依赖于 ControllerBase 可能会导致错误(例如,如果在某些控制器方法中忘记调用 base 的方法)并且感觉不像他们要走的路。此外,只有在用户使用预定义路径(如 www.myapp.com/Users/joedoe/Detail)输入 URL 时,家庭控制器上的此功能才会失败。
我搜索并找到了在 Startup 类中传递给应用程序构建器的 OpenIdConnectOptions 对象中使用 Events 属性的引用:
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 应用程序在用户通过身份验证后捕获事件的首选方式是什么?
提前致谢。
【问题讨论】:
标签: c# azure active-directory asp.net-core-mvc