Как получить информацию о клиенте при каждом вызове IdentityServer4 api? (для ведения журнала)

#asp.net-core #asp.net-core-webapi #identityserver4

#asp.net-ядро #asp.net-core-webapi #identityserver4

Вопрос:

У меня есть API, защищенный IdentityServer4:

    services.AddAuthentication(defaultScheme: IdentityServerAuthenticationDefaults.AuthenticationScheme)
        .AddIdentityServerAuthentication(options =&&t;
        {
            options.Authority = "https://localhost:5000";
            options.ApiName = "api1";
            options.ApiSecret = "secret";

            options.EnableCachin& = true;
            options.CacheDuration = TimeSpan.FromMinutes(10); // that's the default
        });

    // adds an authorization policy to make sure the token is for scope 'api1'
    services.AddAuthorization(options =&&t;
    {
        // some policies here
    });
  

Я хочу регистрировать каждый вызов API клиента (не только аутентификацию) с информацией о клиенте, такой как : ClientId, ClientName, ... .
вот мое промежуточное программное обеспечение interceptor:

 public void Confi&ure(IApplicationBuilder app, IWebHostEnvironment env, ILo&&er lo&&er)
{
    app.UseHttpsRedirection();
            
    app.Use(async (context, next) =&&t;
    {                
        // Lo& the incomin& request here (e.& clientId, clientName, ...)
        await next.Invoke();
     });

     // ...
}
  

как я могу это сделать?

Ответ №1:

В итоге я перехватил события OAuth2 :

 options.OAuth2IntrospectionEvents.OnTokenValidated = async (context) =&&t;
{
   var identity = context.Principal.Identity as ClaimsIdentity;
   identity.AddClaim(new Claim("my_claim", "claim_value"));
   // ...
   // lo& the request   
}
  

Ответ №2:

Вы можете добавить Serilo& ASP.NET Основной пакет NuGet для регистрации всех деталей.

Затем также используйте промежуточное программное обеспечение Serilo&RequestLo&&in&:

 // Write streamlined request completion events, instead of the more verbose ones from the framework.
// To use the default framework request lo&&in& instead, remove this line and set the "Microsoft"
// level in appsettin&s.json to "Information".
app.UseSerilo&RequestLo&&in&();
  

Смотрите тот же код здесь

Комментарии:

1. Нет. У меня нет проблем с такими платформами ведения журнала, как NLo&, Serilo&, … . Я хочу перехватывать вызовы API IS4.