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 事件 的相关文章

  • 当我的进程被终止时到底会发生什么?

    我有一个包含本机代码和托管代码的混合进程 在 Windows Server 2003 上运行 当我从进程资源管理器中终止进程时 它会进入 100 cpu 的状态 并在消失之前保持这种状态一段时间 有时甚至 10 分钟 在此期间我无法 杀死
  • Monitor.TryEnter(object) 和 Monitor.TryEnter(object, ref bool) 之间存在什么重要区别?

    这些代码片段的行为似乎应该相同 1 Monitor TryEnter 对象 if Monitor TryEnter lockObject try DoSomething finally Monitor Exit lockObject 2 M
  • C# 组件事件?

    我正在尝试编写一个将公开事件的 C 组件 该组件将由非托管 C 应用程序导入 根据一些教程 我想出了这段代码 针对 C 端 namespace COMTest ComVisible true Guid 02271CDF BDB9 4cfe
  • 为什么在从同一解决方案引用另一个项目时会出现 FileNotFound 异常?

    我正在学习如何使用 NUnit 我的解决方案中有我的主项目 并在同一解决方案中创建了一个单独的项目 该项目将保存我的单元测试 并具有自己的命名空间 从该项目中 我添加对主项目的引用并添加 using MainProjectNamespace
  • 我们可以使用 C# 录制发送到扬声器的声音吗

    我有一个软件 SoundTap Streaming Audio Recorder 它记录发送到扬声器的任何音频 无论流是来自网络还是来自某些文件或麦克风 我可以在桌面应用程序中制作这样的应用程序 以便我可以录制发送到扬声器的流 无论来源如何
  • 将 .NET 类库(主要定义 CRUD 操作)公开为服务

    公开现有内容的最佳 有效和最快的方法是什么 类 图书馆 主要定义 CRUD 操作 作为service 周转基金服务 or WCF数据服务 以便它可以与银光 or Ajax 在那儿tools 代码生成器 RAD 工具 哪些可以支持这个 预先感
  • vb.net if 简写

    有没有办法使用速记来做这样的事情 If Not txtBookTitle Text String Empty Then objBook DisplayName txtBookTitle Text End If objBook Display
  • C++/CLI 中的 ref 和 out

    我知道 C CLI 代码 void foo Bar x 转变为 Void foo ref Bar x 变成的 C CLI 代码是什么 Void foo out Bar x 您可以使用 OutAttribute using namespace
  • 如何在每次测试后运行 ClassCleanup (MSTest)?

    我有几个带有测试套件的课程 每个测试类从 ClassInitialize 开始 到 ClassCleanup 结束 我的问题是 ClassCleanup 不会在每个类结束时调用 而是仅在三个类中的所有测试之后调用 我可以解决这个问题吗 谢谢
  • 优化查找所有实现 IInterface 的类以及使用特定类型显式实现它的类

    我定义了一个接口 ISerializeDeserialize 和一些继承通用接口的类 我还有一些使用 CodeDomProvider 生成代码的程序集 它生成从同一接口继承的类 但使用特定类型实现它 我想要实现的是获取通用实现和实现特定类型
  • 机器的最大 TCP 连接数

    我正在 NET 中创建一个 Windows 服务 N 个客户端可以连接到该服务 该服务启动 TCP 侦听器并接受客户端连接 我面临的问题是我只能打开 10 个到该服务的连接 Listener AcceptTcpClient 方法仅接受 10
  • 如何将外部程序集的类型添加到工具箱控件? (WPF)

    我正在尝试在我的 WPF 应用程序中执行类似的操作 ToolboxControl ctrl new ToolboxControl Assembly assembly Assembly LoadFile file var category n
  • 使用 SSH.NET SftpClient 设置扩展文件属性

    在使用 Renci SSH NET SFTP 库将文件从 Windows 上传到远程计算机 Ubuntu 16 04 LTS 后 我尝试使用扩展文件属性来存储一些信息 但属性没有得到保留 这就是我尝试设置扩展属性的方式 SftpFileAt
  • 如何从 .Net 打印对话框中删除打印机?

    我正在开发一个 Winforms 应用程序 它允许用户打印一些不同的 Reporting Services 报告 不幸的是 如果用户尝试使用 Adob e PDF 打印机打印为 PDF 则会崩溃 我们无法解决此问题 因此作为解决方案 我们希
  • 装载组件

    有很多讨论展示了如何从 BIN 和 GAC 加载程序集 我的问题更笼统 我很想知道程序集加载是如何工作的 举例来说 在BIN文件夹中我们可以有 A dll A dll config A dll config 文件可能如下所示
  • 在 foreach 循环中启动一个新线程

    我有一个对象列表 我想循环该列表并启动一个新线程 传入当前对象 我写了一个我认为应该这样做的例子 但它不起作用 具体来说 线程似乎在每次迭代中都被覆盖 但这对我来说并没有什么意义 因为我每次都会创建一个新的 Thread 对象 这是我写的测
  • .NET 4.0 代码可以与 .NET 2.0 代码互操作吗?

    NET 4 0 程序集调用 NET 2 0 程序集中的代码是否存在兼容性障碍 反之亦然 更具体地说 我正在研究在使用基于 NET 2 0 的第三方应用程序时升级到 Visual Studio 2010 该应用程序可通过引用我的自定义代码的挂
  • Debug.WriteLine() 未命中

    我正在调试 Windows 服务 通过点击F5在 Visual Studio 2010 中 使用以下代码 In 程序 cs file static void Main if Environment UserInteractive We ar
  • 等于方法实现助手 (C#)

    每次我编写一些数据类时 我通常都会花很多时间编写 IEquatable 实现 我写的最后一堂课是这样的 public class Polygon public Point Vertices get set 实施 IEquatable 是一项
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator

随机推荐

  • 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 上进行身份验证 那部分有效 我如何使