Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
maxLevel3

Einleitung

Die API wird via .net Dependency-Injection konfiguriert. Abhängig von der OpenId-Client-Konfiguration und dem gewünschten Authentifizierungsverfahren kann die Konfiguration anders aussehen.

Basis Optionen

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

Code Block
{
    "Id": 2,
    "Nachname": {
        "WasAccessDenied": false,
        "Value": "Burkhard"
    },
    "CoreIdentityType": {
        "Id": {
            "WasAccessDenied": false,
            "Value": 1
        }
    }
}
Code Block
languagejson
{
    "Id": 2,
    "Nachname": {
        "WasAccessDenied": false,
        "Value": "Burkhard"
    },
    "CoreIdentityType.Id": {
        "WasAccessDenied": false,
        "Value": 1
    }
}

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,Vorname

AccessDeniedReplacementString="Denied"

Code Block
{
    "Id": 2,
    "Nachname": {
        "WasAccessDenied": false,
        "Value": "Burkhard"
    },
    "Vorname": {
        "WasAccessDenied": true,
        "Value": null
    }
}
Code Block
{
    "Id": 2,
    "Nachname": "Burkhard",
    "Vorname": "Denied"
}

.NET Core Konfiguration

Benötigte Assemblies

  • iTsense.Moving.Common.NetStandard

  • iTsense.Moving.ApiV2.Common

  • iTsense.Moving.ApiV2.Client

  • iTsense.Moving.ApiV2.Client.NetCore

Beispielkonfiguration mit Authentifizierung via HTTP-Userkontext

Code Block
languagec#
public void ConfigureServices(IServiceCollection services)
{
	services.AddApiV2Client<
		ApiV2OpenIdClient<ApiV2OpenIdHttpContextClientOptions>, 
		ApiV2OpenIdHttpContextClientOptions
	>AddApiV2ClientWithHttpContextAuthentication(o =>
	{
		o.ApiBaseUri = new Uri("https://localhost:8000/apiv2");
		//Authorityo.ExplodeFlatChainProperties /= ClientIdfalse;
		// o...AccessDeniedReplacementString not required as Token is handled by HttpContext
= ">>AccessDenied<<";
	});
	services.AddOpenIdConnectCookieAuthenticationAddOpenIdConnectCookieAuthentication<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

Code Block
languagec#
public void ConfigureServices(IServiceCollection services)
{
	services.AddApiV2Client<
		ApiV2OpenIdClient<ApiV2OpenIdPasswordFlowClientOptions>,
		ApiV2OpenIdPasswordFlowClientOptions
	>.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.ApiV2.Common

  • iTsense.Moving.ApiV2.Client

  • iTsense.Moving.Common.ApiV2.Client.CastleWindsor

Beispielkonfiguration mit Authentifizierung via statischem API-Benutzer

Code Block
languagec#
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 werden welche anschlissend via DependencyInjection konsumiert werden

Beispielkonfiguration

Code Block
languagec#
public interface IApiV2ClientUserContext : IApiV2Client
{
}
public interface IApiV2ClientAdminUser : 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<IApiV2ClientAdminUser>(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<<";
		});
	}
}