【问题标题】:Executing code after user has been authenticated using Azure Active Directory使用 Azure Active Directory 对用户进行身份验证后执行代码
【发布时间】: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


    【解决方案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

    【讨论】:

    • 谢谢约翰!正如您所说,使用回调函数设置 OnTokenValidated 属性可以解决问题。提供的示例很棒,我计划使用会话状态,但声明似乎是更好的选择,就像您提供的示例一样。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多