TD.ADSApi.Clients 1.1.1
td-adsapi-clients
Pouzitie klienta
- cez DI zaregistrovat clienta
// Mapovanie options z appsettings.json - kazdy projekt moze mat inu sekciu/kluce
builder.Services.Configure<ClientCredentialsOptions>(opts =>
{
opts.TokenUrl = builder.Configuration["ADSTokenProvider:TokenUrl"]!;
opts.ClientId = builder.Configuration["ADSTokenProvider:ClientId"]!;
opts.ClientSecret = builder.Configuration["ADSTokenProvider:ClientSecret"]!;
});
builder.Services.AddHttpClient<IClientCredentialsTokenProvider, ClientCredentialsTokenProvider>();
// Register AuthorizationHeaderHandler with fallback token provider
builder.Services.AddTransient<AuthorizationHeaderHandler>(sp =>
{
var httpContextAccessor = sp.GetRequiredService<IHttpContextAccessor>();
var tokenProvider = sp.GetRequiredService<IClientCredentialsTokenProvider>();
return new AuthorizationHeaderHandler(httpContextAccessor, () => tokenProvider.GetTokenAsync());
});
// externe api, atd.
var section = builder.Configuration.GetSection("TarDmnAPI");
var baseUrl = section.GetValue<string>("BaseUrl") ?? string.Empty;
var timeoutSeconds = section.GetValue<int?>("TimeoutSeconds") ?? 30;
builder.Services.AddHttpClient<ITarDmnClient, TarDmnClient>(client =>
{
if (!string.IsNullOrEmpty(baseUrl))
{
client.BaseAddress = new Uri(baseUrl.TrimEnd('/') + "/");
}
client.Timeout = TimeSpan.FromSeconds(timeoutSeconds);
}).AddHttpMessageHandler<AuthorizationHeaderHandler>();
AuthorizationHeaderHandler sluzi na preposielanie Authorization z aktualneho requestu do volania API, alebo vycita token podla potreby cez ClientCredentialsTokenProvider
ClientCredentialsTokenProvider sluzi na vycitavanie tokenu vyzaduje v appsettings.json sekciu ADSTokenProvider s klucmi TokenUrl, ClientId a ClientSecret
"ADSTokenProvider": { "TokenUrl": "https://nieco.niekde.com/realms/nicl/protocol/openid-connect/token", "ClientId": "tajny_clienid", "ClientSecret": "tajny_clientsecret" },
navy mozu byt aj ine, len treba spravne plnit ClientCredentialsOptions
ak nie potrebne ziskavat token(vzdy sa bude predavat z requestu) staci zaregistrovat AuthorizationHeaderHandler
bez ClientCredentialsOptions a IClientCredentialsTokenProvider
self.Services.AddTransient<AuthorizationHeaderHandler>();
Generator spo
ads sluzby vyzaduju plnenie hodnot spo-deviceid, spo-requestid a spo-previousrequestid na generovaie je pripravena trieda SpoDeviceIdGenerator ktoru treba cez DI zaregistrovat
self.Services.AddSingleton<ISpoDeviceIdGenerator, SpoDeviceIdGenerator>();
nasledne funkcia SpoDeviceIdGenerator.Generate_spo_deviceid() generuje spo_deviceid podla formatu "127~HHmmssNN", kde NN je poradové číslo 00-99, jedinečné v rámci jedné sekundy přes všechny requesty. vysledny retazec je zakodovany do Base64.
funkcia Generate_spo_requestid() generuje spoRequestId a spoPreviousRequestId podla formátu "11yyyyMMdd" zakódovaného v Base64.
No packages depend on TD.ADSApi.Clients.
.NET 10.0
- Microsoft.AspNetCore.Http.Abstractions (>= 2.3.9)
- Microsoft.Extensions.Options (>= 10.0.5)
- Microsoft.Net.Http.Headers (>= 10.0.5)
- Newtonsoft.Json (>= 13.0.4)