使用 AD B2C 时如何添加 OnTokenValidated 事件处理程序?

g.p*_*dou 4 openid-connect azure-ad-b2c asp.net-core

我在 ASP.NET Core 3 应用程序中使用 Azure B2C,它运行良好。我在启动中使用以下代码:

services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
    .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));
Run Code Online (Sandbox Code Playgroud)

我想处理标准的 TokenValidated OpenIdConnect 事件,换句话说,我需要一个配置来设置我的事件处理程序。

检查源代码,我看到了该类AzureAdB2COpenIDConnectEventHandlers.cs及其用法,AzureADB2COpenIdConnectOptionsConfiguration但不幸的是,两个类都声明为internal

我所需要的只是让我的 TokenValidated 处理程序生效,保留所有现成的基于 OpenIdConnect 的 AD B2C 功能,该功能目前正在运行。

伪代码,类似这样:

options.Events = new OpenIdConnectEvents()
{
     // ...
     OnTokenValidated = MyTokenValidatedHandler
};
Run Code Online (Sandbox Code Playgroud)

如何以简单的方式完成此操作?

g.p*_*dou 9

我通过在 github 中搜索 ["Events.OnTokenValidated" AzureAdB2C] 找到了我的答案,并为我的案例组装了以下内容:

// My existing code in Startup:
services.AddAuthentication(AzureADB2CDefaults.AuthenticationScheme)
        .AddAzureADB2C(options => Configuration.Bind("AzureAdB2C", options));

// My added code to handle the OnTokenValidated event
services.Configure<OpenIdConnectOptions>(AzureADB2CDefaults.OpenIdScheme, options =>
{
    var onTokenValidated = options.Events.OnTokenValidated;
    options.Events.OnTokenValidated = context =>
    {
        onTokenValidated?.Invoke(context);
        // My custom handler goes below:
Run Code Online (Sandbox Code Playgroud)