Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »

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

{
    "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.ApiV2.Common

  • iTsense.Moving.ApiV2.Client

  • iTsense.Moving.ApiV2.Client.NetCore

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.ApiV2.Common

  • iTsense.Moving.ApiV2.Client

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

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<<";
		});
	}
}
  • No labels