Introduction
The API is configured via .NET dependency injection. Depending on the Openld client configuration and desired authentication method, the configuration can look different.
Basic options
ApiBaseUri
Die URl unter welcher die API erreichbar ist, z.B: https://localhost:8000/apiv2
ExplodeFlatChainProperties
Default: true
Definiert ob Property-Chains als verschachtelte Objekte oder einfache objekte zurückgegeben werden.
Beispiel: /servicedmcore/CoreIdentity/2/?fields=Id,Nachname,CoreIdentityType.Id
ExplodeFlatChainProperties = true | ExplodeFlatChainProperties = false |
---|---|
{ "ci_family_name": { "was_access_denied": false, "value": "Testikus" }, "id": 20, "core_identity_type": { "id": { "was_access_denied": false, "value": 1 } } } | { "ci_family_name": { "was_access_denied": false, "value": "Testikus" }, "core_identity_type.id": { "was_access_denied": false, "value": 1 }, "id": 20 } |
AccessDeniedReplacementString
Definiert ob die AccessDeniedHandler-Objekte ersetzt werden sollen. Wird die Option verwendet wird anstelle der AccessDeniedHandler-Objekte nur der Wert der Value-Property zusück gegeben. Sollte eine Zugriffsverweigerung vorliegen wird anstelle des Wertes der ReplacementString zurückgegeben.
Diese Option ist nicht Typen-sicher, da im Fall einer Zugriffsverweigerung immer ein String zurückgegeben wird, unabhängig vom ursprünglichen Type der Property
Beispiel: /servicedmcore/CoreIdentity/2/?fields=Id,Nachname,Language
AccessDeniedReplacementString=">Denied<" | |
---|---|
{ "ci_family_name": { "was_access_denied": true, "value": null }, "id": 20, "core_identity_type": { "id": { "was_access_denied": false, "value": 1 } } } | { "ci_family_name": ">Denied<", "id": 20, "core_identity_type": { "id": 1 } } |
.NET Core Konfiguration
Benötigte Assemblies
iTsense.Moving.Common.NetStandard
iTsense.Moving.Common.ApiV2
iTsense.Moving.Common.ApiV2.Client
iTsense.Moving.Common.ApiV2.Client.NetCore
Optionale Assemblies
iTsense.Moving.Common.ApiV2.Client.DataContracts
Standard Datacontracts
Beispielkonfiguration mit Authentifizierung via HTTP-Userkontext
public void ConfigureServices(IServiceCollection services) { services.AddApiV2ClientWithHttpContextAuthentication(o => { o.ApiBaseUri = new Uri("https://localhost:8000/apiv2"); //o.ExplodeFlatChainProperties = false; //o.AccessDeniedReplacementString = ">>AccessDenied<<"; }); services.AddOpenIdConnectCookieAuthentication<IApiV2Client>(options => { options.Authority = "https://coslogin.local:5000"; options.RequireHttpsMetadata = false; // dev only options.ClientId = "[OpenID Client Id]"; options.ClientSecret = "[OpenID Client Secret]"; options.ResponseType = "code"; options.ResponseMode = "form_post"; options.Scope.Add("roles"); options.Scope.Add("profile"); options.Scope.Add("offline_access"); options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.CallbackPath = "/signin-oidc"; options.UsePkce = true; }); }
Beispielkonfiguration mit Authentifizierung via statischem API-Benutzer
public void ConfigureServices(IServiceCollection services) { services.AddApiV2ClientWithOpenIdPasswordFlow(o => { o.Authority = new Uri("https://coslogin.local:5000"); o.ApiBaseUri = new Uri("https://localhost:8000/apiv2"); o.ClientId = "[OpenID Client Id]"; o.ClientSecret = "[OpenID Client Secret]"; o.Username = "[OpenID User Name]"; o.Password = "[OpenID User Password]"; //o.ExplodeFlatChainProperties = false; //o.AccessDeniedReplacementString = ">>AccessDenied<<"; }); }
.NET Full Framework Konfiguration (Castle Windsor)
Benötigte Assemblies
iTsense.Moving.Common.NetStandard
iTsense.Moving.Common.ApiV2
iTsense.Moving.Common.ApiV2.Client
iTsense.Moving.Common.ApiV2.Client.CastleWindsor
Optionale Assemblies
iTsense.Moving.Common.ApiV2.Client.DataContracts
Standard Datacontracts
Beispielkonfiguration mit Authentifizierung via statischem API-Benutzer
public void ConfigureContainer(IWindsorContainer container) { container.AddApiV2ClientWithOpenIdPasswordFlow(o => { o.Authority = new Uri("https://coslogin.local:5000"); o.ApiBaseUri = new Uri("https://localhost:8000/apiv2"); o.ClientId = "[OpenID Client Id]"; o.ClientSecret = "[OpenID Client Secret]"; o.Username = "[OpenID User Name]"; o.Password = "[OpenID User Password]"; }); }
Mehrere Clients mit unterschiedlicher Konfiguration
Es können mehrere Clients mit unterschiedlichen Konfigurationen registriert werden. Dazu muss pro Konfiguration ein Interface deklariert. Diese können anschlissend via DependencyInjection konsumiert werden.
Die neuen Interfaces dürfen keine zusätzlichen Member enthalten!
Beispielkonfiguration
public interface IApiV2ClientUserContext : IApiV2Client { } public interface IApiV2ClientAdminContext : IApiV2Client { } public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddApiV2ClientWithHttpContextAuthentication<IApiV2ClientUserContext>(o => { o.ApiBaseUri = new Uri("https://localhost:8000/apiv2"); //o.ExplodeFlatChainProperties = false; //o.AccessDeniedReplacementString = ">>AccessDenied<<"; }); services.AddOpenIdConnectCookieAuthentication<IApiV2ClientUserContext>(options => { options.Authority = "https://coslogin.local:5000"; options.RequireHttpsMetadata = false; // dev only options.ClientId = "[OpenID Client Id]"; options.ClientSecret = "[OpenID Client Secret]"; options.ResponseType = "code"; options.ResponseMode = "form_post"; options.Scope.Add("roles"); options.Scope.Add("profile"); options.Scope.Add("offline_access"); options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.CallbackPath = "/signin-oidc"; options.UsePkce = true; }); services.AddApiV2ClientWithOpenIdPasswordFlow<IApiV2ClientAdminContext>(o => { o.Authority = new Uri("https://coslogin.local:5000"); o.ApiBaseUri = new Uri("https://localhost:8000/apiv2"); o.ClientId = "[OpenID Client Id]"; o.ClientSecret = "[OpenID Client Secret]"; o.Username = "[OpenID User Name]"; o.Password = "[OpenID User Password]"; //o.ExplodeFlatChainProperties = false; //o.AccessDeniedReplacementString = ">>AccessDenied<<"; }); } }