Azure active directory Microsoft Identity Web-如何让用户登录事件?

Azure active directory Microsoft Identity Web-如何让用户登录事件?,azure-active-directory,microsoft-graph-api,identity,asp.net-core-3.1,Azure Active Directory,Microsoft Graph Api,Identity,Asp.net Core 3.1,我正在使用Microsoft.Identity.Web NuGet软件包,以便使用Azure AD将用户登录到Net Core 3.1 WebApp,然后在用户登录后,我使用他们的令牌和作用域调用MS Graph API,从他们的个人资料中获取一些附加数据,例如他们的姓名、姓氏、,用户名等。基本上是关于用户的一些附加信息,这些信息不会自动包含在Azure AD返回的令牌中 这部分工作做得很好 我想要实现的是配置某种形式的系统事件或触发器,以告知用户何时成功登录,然后我将使用此触发器运行Graph

我正在使用Microsoft.Identity.Web NuGet软件包,以便使用Azure AD将用户登录到Net Core 3.1 WebApp,然后在用户登录后,我使用他们的令牌和作用域调用MS Graph API,从他们的个人资料中获取一些附加数据,例如他们的姓名、姓氏、,用户名等。基本上是关于用户的一些附加信息,这些信息不会自动包含在Azure AD返回的令牌中

这部分工作做得很好

我想要实现的是配置某种形式的系统事件或触发器,以告知用户何时成功登录,然后我将使用此触发器运行Graph API查询并获取用户的其他配置文件属性。我之所以要这样做,是因为每当用户请求一个新页面并运行一个方法或操作时,我都可以在日志中包含他们的附加属性

由于Microsoft.Identity.Web包将帐户控制器隐藏在NuGet包中的某个位置(假设是dll或其他东西),因此我似乎无法访问它,以查看我可以通过事件触发器锁定的内容,我可以使用该事件触发器进行上述操作

除非在用户登录后调用MS Graph,否则我将无法访问要包含在Serilog日志结构中的某些用户配置文件属性

一旦我从MS Graph获得了所需的用户属性,那么我认为最好的解决方案是在登录会话的生命周期中将它们作为getters setter存储在内存中,这样我就可以通过DI或模型从应用程序中的任何页面模型/控制器访问它们

我曾想过,在成功登录后加载主页索引页时,只需从OnGet()方法调用MS Graph,但问题是用户可能不一定要先访问主页才能登录,他们可能已经将书签保存到了另一个他们想直接访问的页面,这意味着OnGet()主页中的方法可能永远不会运行。我需要一个更加防弹的解决方案,因为我应该确保每次都能获取这些额外的用户配置文件属性,而不管第一次访问哪个页面会提示用户登录过程

注意:我观察到这样一个事实:如果我直接进入一个启用了授权的页面,一旦登录,OIDC就会返回到同一页面

这个谜题的最后一步是,一旦用户注销,就从内存中删除保存的用户配置文件属性,但是这应该很容易,因为注销会话总是返回给我https://localhost:5001/MicrosoftIdentity/Account/SignedOut


如果有人对我如何使用此库来实现上述目标有任何想法,那就太好了,谢谢

我在Microsoft Identity Web中找到了一些自定义代码:

AddSignIn有另一个覆盖,它接受委托而不是 配置部分。使用配置节进行覆盖 实际上使用委托调用覆盖。在高级场景中 可能需要按代码添加配置,或者如果要订阅 打开IDConnect事件。例如,如果要提供自定义 验证令牌时进行处理

以下是许多情况下ASP.net核心的Microsoft代码示例:

谢谢卢克,是的,我昨晚终于找到了这个覆盖信息,现在已经整理好了。我还得出结论,另一个解决方案是在成功登录后从Azure返回时向ID令牌添加一些额外的可选声明,只是在mo上也要弄清楚这一点。