Microsoft.Identity.Web:未触发 OnTokenValidated 事件

2023-12-25

我想做的是在身份验证后添加声明。 以下是注册的示例OnTokenValidation事件并不能解决问题。该事件永远不会触发。

我在用着Microsoft.Identity.Web在 Azure AD B2C 上进行身份验证。那部分有效! 我如何使用注册事件AddMicrosoftIdentityWebAppAuthentication?

services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C")
    .EnableTokenAcquisitionToCallDownstreamApi(new string[] {Configuration["DemoApi:ServiceScope"]})
    .AddInMemoryTokenCaches();

services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, options =>
{
    options.Events = new OpenIdConnectEvents
    {
        OnTokenValidated = ctx =>
        {
            //query groups with graph api to get the role

            // add claims
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Role, "superadmin")
            };
            var appIdentity = new ClaimsIdentity(claims);
            ctx.Principal.AddIdentity(appIdentity);
            return Task.CompletedTask;
        },
    };
});

使用 MicrosoftIdentityOptions:

services.Configure<MicrosoftIdentityOptions>(options =>
{
   options.Events = new OpenIdConnectEvents
   {
      OnTokenValidated = async ctx =>
      { 
         //add claims
         var scopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');

         var clientApp = ConfidentialClientApplicationBuilder
                .Create(Configuration["AzureAD:ClientId"])
                .WithTenantId(Configuration["AzureAD:TenantId"])
                .WithClientSecret(Configuration["AzureAD:ClientSecret"])
                .Build();
         var authResult = await clientApp
                .AcquireTokenOnBehalfOf(scopes, new UserAssertion(ctx.SecurityToken.RawData))
                .ExecuteAsync().ConfigureAwait(false);

         var graphClient = new GraphServiceClient(Configuration["DownstreamApi:BaseUrl"], new DelegateAuthenticationProvider(
                requestMessage =>
                {
                    requestMessage.Headers.Authorization = new AuthenticationHeaderValue("bearer", authResult.AccessToken);
                    return Task.CompletedTask;
                }));
         var identity = new ClaimsIdentity();
            //https://graph.microsoft.com/1.0/me/transitiveMemberOf/microsoft.graph.group?$count=true&$select=displayName
         var groups = await graphClient.Me.TransitiveMemberOf.Request().Select("displayName").GetAsync().ConfigureAwait(false);
         while (groups != null && groups.Count > 0)
         {
             foreach (var g in groups)
             {
                 if (!(g is Group groupItem)) continue;
                 identity.AddClaim(new Claim(ClaimTypes.Role, groupItem.DisplayName));
             }
             if (groups.NextPageRequest != null)
                 groups = await groups.NextPageRequest.GetAsync().ConfigureAwait(false);
             else
                 break;
         }
         ctx.Principal.AddIdentity(identity);
      }
   };
});
services.AddMicrosoftIdentityWebAppAuthentication(Configuration);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Microsoft.Identity.Web:未触发 OnTokenValidated 事件 的相关文章

  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 创建带有部分的选项卡式侧边栏 WPF

    我正在尝试创建一个带有部分的选项卡式侧边栏 如 WPF 中的以下内容 我考虑过几种方法 但是有没有更简单 更优雅的方法呢 方法一 列表框 Using a ListBox并将 SelectedItem 绑定到右侧内容控件所绑定的值 为了区分标
  • 将文本从文本文件添加到 PDF 文件[重复]

    这个问题在这里已经有答案了 这是我的代码 using FileStream msReport new FileStream pdfPath FileMode Create step 1 using Document pdfDoc new D
  • 将标签文本的一部分设置为粗体

    有什么办法可以使一部分label text要大胆吗 label text asd string 想要string部分要加粗 有可能吗 这怎么办 下面的类说明了如何通过覆盖来做到这一点OnPaint in the LabelWinForms
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • .NET 内存不足故障排除

    在阅读了几篇有关 NET 技术中的内存的启发性文章后 Out of Memory 不是指物理内存 https learn microsoft com en us archive blogs ericlippert out of memory
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 如何使用命令行压缩指定文件夹

    你们能告诉我如何将指定的文件压缩到同一个 Zip 文件中吗 让我告诉我我的文件夹是如何填充的 任务调度程序有我的数据库的备份 并每天将它们保存到文件中 它每天创建 4 个数据库备份 这意味着每天会多出 4 个文件 因此 我需要将新创建的备份
  • 如何访问 TabControl 选项卡内的控件?

    这就是我到目前为止所拥有的一切 tabControl1 TabPages 0 我的 TabControl 的 TabPage1 中有一个 PictureBox 如何使用代码而不是属性窗格更改图像位置 尽管控件出现在容器内 作为 TabCon
  • 泛型和实现 IComparable

    我对泛型非常陌生 我正在尝试编写一个简单的类 它将是泛型的 但也允许对字符串成员变量的一些描述进行排序 目前我有一个基本类 但是当我尝试实现接口成员 CompareTo 时 我在顶部收到一个错误 告诉我它尚未实现 这里有什么问题呢 usin
  • IIS / .Net 只允许对给定用户会话进行单个并发响应

    这是我的问题 我们有一个 Net 4 5 Web 表单应用程序 由于服务器端的大量数据访问和操作 应用程序中的某些页面需要很长时间才能加载 如果用户在页面完成加载之前关闭浏览器选项卡 然后打开新选项卡 则新选项卡中对应用程序的任何请求都将挂
  • WPF 媒体格式

    WPF 是否内置对任何音频和视频格式的支持 我将使用 MediaPlayer 和 MediaElement 类来构建一个小型媒体播放器 目前 我不想处理 NET 没有本机支持的编解码器和格式 WPF 默认支持视频格式 WMV MPEG 和一
  • 任务和异步任务之间的区别

    C 提供了两种创建异步方法的方法 Task static Task
  • 在编译输出中添加程序集绑定 (app.config)

    如果我编译应用程序 则会在输出中自动添加程序集绑定 具体的程序集绑定不在app config在 Visual Studio 中但在创建的应用程序配置中 有什么办法可以检查为什么会自动添加程序集绑定吗 选项AutoGenerateBindin
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest

随机推荐

  • Paging 3 库使用 LoadType.APPEND 递归调用加载方法

    我正在尝试显示来自图标查找器 API https developer iconfinder com reference getting started with your api 1 好像是ItemKeyedDataSource对我来说 我
  • MVC3 - Ajax 操作链接 - OnBegin、onComplete

    使用 MVC3 C 和 Razor 视图引擎 我有一个带有 Ajax 操作链接的表单 在选项中 我尝试指定 OnBegin 和 OnComplete javascript 函数调用 在这个问题中 我取出了功能的核心部分 并简单地添加了警报
  • 如何让 Maven 将 jar 包含在我的 Eclipse 引用库中?

    我正在尝试采用现有的 Eclipse 项目并添加 pom xml 以便我可以使用 Maven 进行自动构建 在项目中 我的引用库中有一个 jar 文件 该文件不在 Maven 存储库中 我需要做什么才能让 Maven 识别 jar 文件 我
  • 使用 ocaml 图形保存图像

    我想将ocaml图形生成的图片保存在文件中 png或jpeg 谢谢 我假设你正在谈论Graphicsocaml 中的模块 您应该注意到Graphics模块不适用于创建和处理图像 你当然可以打电话Graphics dump image如果你已
  • Postgres pg_try_advisory_lock 阻止所有记录

    我在用着pg try advisory lock 在 Postgres 中 接下来的两个查询锁定了多个记录table1 1 SELECT a id FROM table1 a JOIN table2 b ON a table1 id b i
  • 什么时候不应该使用 CSS 精灵?

    我想知道什么时候不应该使用 CSS 精灵 CSS 精灵效果很好 但是在某些情况下它们会带来很多麻烦吗 和所有事物一样 它有有用的时候 也有有害的时候 许多开发人员喜欢使用 CSS sprite 因为它可以节省请求时间 浏览器发出一个请求 下
  • 在 64 位应用程序中使用为 32 位编写的汇编代码

    我可以使用以下链接中为 x86 64 计算机上的 64 位程序为 32 位 x86 编写的 Serpent 加密的汇编例程吗 也就是说 无需为其启动单独的 32 位进程 如果没有 是否有人有一个可以在 32 位和 64 位上运行的 Serp
  • 如何查找路线的所有端点(Apache Camel,Java)

    我在 Camel 上下文中有几条路线和许多端点 因此需要获取一条路由创建的所有端点 CamelContext context new DefaultCamelContext RouteBuilder route1 new RouteBuil
  • C# 进程在处置时挂起

    我正在从 C 调用命令行进程 该进程从某个远程服务器进行更新 当它可以找到远程服务器并从中获取数据时 工作正常 如果未连接到网络也可以正常工作 但是 当远程服务器无法访问时 外部进程将无限期地尝试获取数据 并且没有命令行选项来指定超时 所以
  • 如何从目标获取包含目录以在 add_custom_target 中使用?

    我正在建模依赖关系target link libraries 正如在this https pabloariasal github io 2018 02 19 its time to do cmake right 博客文章 target li
  • 如何使用Mercurial进行文本文档的版本控制?

    这不完全是一个编程问题 但我认为它比在TeX组 https tex stackexchange com 我想使用版本控制来跟踪文本文件的更改 用于创建LaTeX输出 由于我不是程序员 所以我对版本控制系统还没有更深入的经验 我想用Mercu
  • 数据表服务器端人口

    我花了几个小时试图找到如何使用来自后端的 json 填充数据表 这是我的代码
  • ValueError:预期目标大小 (128, 44),得到 torch.Size([128, 100]),LSTM Pytorch

    我想建立一个模型 根据前面的字符预测下一个字符 我已将文本拼接成长度 100 的整数序列 使用数据集和数据加载器 我的输入和目标变量的维度是 inputs dimension batch size sequence length In my
  • 如何从两个 URL 解析两个 XML 文件(Swift)

    我有两个 XML URL 第一个 URL 显示SongName on the Table第二个 URL 是SongPath 当我点击SongName在桌子上它转到SongPath在第二个网址中 这是table https i stack i
  • SSL:400 未发送所需的证书

    代码和输入 我正在尝试建立 SSL 连接 但我得到了400 No required SSL certificate was sent来自服务器的响应 我正在以标准方式执行此操作 例如所描述的here https stackoverflow
  • Scala 中finally 块的返回值[重复]

    这个问题在这里已经有答案了 可能的重复 scala 中的 return 和 try catch finally 块评估 https stackoverflow com questions 8443743 return and try cat
  • 带有导航组件的 BottomNavigationView - 选定的片段未显示

    我目前正在迁移到 android 导航组件 并且在 BottomNavigationView 中选择新项目时无法使片段转换正常工作 我按照官方文档中的说明进行操作 没有发现所选片段未显示的任何问题 在activity的onCreate方法中
  • 如何正确输出闪亮的Plotly图?

    我正在尝试根据纽约犯罪历史数据制作一个闪亮的应用程序 我正在使用单闪亮页面方法 这是数据 https data world data society nyc crime data https data world data society
  • 为什么 IronPython 告诉我 pip 是一个包而不是可执行文件?

    我是 Python 的新手 我想尝试看看 Pyomo 用于数学建模的 Python 包 是否可以在 IronPython 下工作 因为我用于生成 Pyomo 所需数据的所有代码都是用 C 编写的 我安装了 IronPython 2 7 5
  • Microsoft.Identity.Web:未触发 OnTokenValidated 事件

    我想做的是在身份验证后添加声明 以下是注册的示例OnTokenValidation事件并不能解决问题 该事件永远不会触发 我在用着Microsoft Identity Web在 Azure AD B2C 上进行身份验证 那部分有效 我如何使