SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
„Echtes“ Single Sign-On mit APEX 
Niels de Bruijn MT AG Ratingen 
Schlüsselworte 
Single Sign-On (SSO), Apache 2.x, Oracle Application Express 4.2.5 (APEX), Oracle REST Data Services 2.0.x (ORDS), Kerberos. 
Einleitung 
Man muss nur seine Webapplikation öffnen und schon ist die Anmeldung erfolgt! Ein Traum der nur selten in Unternehmen Wahrheit wird. Dabei lässt sich Single Sign-On (SSO) für interne (APEX) Webapplikationen in kürzerer Zeit und ohne Zusatzkosten einrichten. Bei einem Unternehmen mit 200 Mitarbeitern, die sich jeden Tag 15 Sekunden mit der Anmeldung an diversen APEX Applikationen beschäftigen müssen, lassen sich somit locker pro Jahr über 6 Personentage einsparen. 
Zentrale Benutzerverwaltung als Basis für Single Sign-On 
Der erste Schritt in Richtung wahres Single Sign-On ist die Einrichtung einer zentralen Ablage von Benutzerdaten. In fast allen Unternehmen ist zu diesem Zweck bereits ein LDAP Server wie beispielsweise das MS Active Directory vorhanden, der zentral gepflegt wird. In nur wenigen Minuten lässt sich auf dieser Basis die Authentifizierung über einen LDAP Server für eine APEX Anwendung einrichten (siehe Abbildung 1). Der Benutzer muss sich zwar noch pro APEX Anwendung mit seinem Benutzernamen und Passwort anmelden, das Passwort liegt in diesem Fall aber nicht mehr lokal in der Anwendung vor. Alleine dies spart in der Entwicklung Zeit und erhöht die IT Sicherheit. Scheidet beispielsweise ein Mitarbeiter aus, muss nur im LDAP Verzeichnis das Konto deaktiviert werden. 
Abb. 1: LDAP Authentifizierung für eine APEX Anwendung in einer Minute einrichten.
Single Sign-On innerhalb APEX Anwendungen 
Sind alle APEX Anwendungen im gleichen APEX Workspace, dann lässt sich eine Art Single Sign- On schnell einrichten. Dazu ist in jeder APEX Anwendung unter „Shared Components > Authentication Scheme“ ein beliebiger Cookie Name einzutragen. Das Ergebnis ist, dass der Endanwender sich nur einmalig bei der ersten APEX Anwendung anmelden muss. Wechselt er in der gleichen Session die Anwendung, ist kein erneutes anmelden mehr notwendig. 
Abb. 2: Cookie Name in einer APEX Anwendung setzen 
„Echtes“ Single Sign-On 
Mit „echtem“ SSO ist in diesem Artikel gemeint, dass die Anmeldung nur einmalig auf Betriebssystemebene stattfindet und anschließend beliebige Applikationen gestartet werden können, ohne dass hierfür eine erneute Authentifizierung notwendig ist. Diese Variante implementieren Sie am besten, wenn die APEX Applikationen Workspace übergreifend vorliegen und/oder weitere (nicht APEX) Webapplikationen SSO fähig gemacht werden müssen. Damit dies funktioniert, müssen einige Voraussetzungen erfüllt sein. Erste Voraussetzung ist das vorhanden sein eines zentralen Authentifizierungsservers. In Linux/ Unix Umgebungen wird hierfür meist Samba eingesetzt, im Microsoft Umfeld ist Active Directory die Regel. Zweite Voraussetzung ist der Einsatz von einem Webserver wie Apache. Alle Anfragen werden vom Browser über Apache an APEX weitergeleitet. Ist der Benutzer auf Apache Ebene authentifiziert, wird durch APEX eine Session erstellt ohne den Endanwender mit einer Anmeldemaske zu konfrontieren. Durch die Vertrauensstellung zwischen der APEX Umgebung und Apache, wird die Identität angenommen die Apache über eine HTTP Header Variable weiterreicht.
Abb. 3: Architektur für „echtes“ Single Sign-On. 
Und so wird es gemacht… 
Nachfolgend wird beispielhaft Schritt-für-Schritt gezeigt wie „echtes“ SSO für eine bestehende APEX Applikation erreicht wird. 
1. DNS Eintrag für Apache 
Um die automatische Anmeldung über Kerberos nutzen zu können muss die Webseite über einen DNS Namen im Browser geöffnet werden. Dazu wird ein DNS Eintrag im DNS Server benötigt. In diesem Dokument gehen wir vom DNS Namen apex.mt-ag.com aus. 
Achten Sie darauf, dass der FQDN als (zusätzlicher) Host im DNS Server eingetragen wurde und nicht als Alias. Mit dem Befehl nslookup apex.mt-ag.com können Sie dies verifizieren. 
Ist der DNS Name als Alias eingetragen, erfolgt die SSO-Authentifizierung nicht über Kerberos, sondern wird mittels Basic Authentication durch die Eingabe des Benutzernamens und Passworts durchgeführt. 
2. Kerberos Service Benutzer in Active Directory erstellen
Für die Kerberos Authentifizierung wird ein aktives Computer-Konto, z.B. APEX_SSO, in Active Directory benötigt. 
Diesem wird anschließend mit folgendem Befehl der ServicePrincipalName des HTTP Dienstes hinzugefügt und eine Keytab-Datei erstellt: 
ktpass -princ HTTP/apex.mt-ag.com@MT-AG.COM -mapuser "CN=APEX_SSO,CN=Computers,DC=mt-ag,DC=com" -crypto All -ptype KRB5_NT_SRV_HST -pass <Passwort> -out c:http_apex.mt-ag.com.keytab 
Hinweise: 
- Obwohl es auch möglich ist ein Benutzerkonto zu verwenden, wird ein Computerkonto empfohlen, weil hiermit keine Anmeldung am Client möglich ist. 
- Die Domäne ist in diesem Beispiel MT-AG.COM und die Webadresse ist https://apex.mt- ag.com. 
- Der Befehl ktpass ist auf einem AD Domain Controller als Administrator auszuführen. 
- Das Passwort des Kontos wird neu gesetzt und in der Keytab-Datei gespeichert und kann daher beliebig gewählt werden. 
- Die Angabe apex.mt-ag.com bezieht sich auf die Webadresse, die im Browser durch den Endanwender eingegeben wird. 
- Obwohl die APEX Umgebung in diesem Beispiel ausschließlich über HTTPS zu erreichen sein wird, ist die Angabe HTTP hinter –princ korrekt. 
- Der Name für die Keytab-Datei kann beliebig gewählt werden. 
- Windows 2003 Server kennt die Angabe –crypto all nicht, daher kann stattdessen -crypto RC4- HMAC-NT angegeben werden.
Die unter c: erstellte Datei benötigt der Apache und wird auf einem Linux Rechner beispielsweise nach /opt/httpkeytab kopiert. Dank dieser Datei ist es Apache erlaubt zu verifizieren, ob jemand bereits an der Windows Domäne angemeldet ist.
3. Konfiguration Tomcat 
Stellen Sie nach der Installation sicher dass in der Datei server.xml die folgenden Direktiven hinzugefügt sind: 
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxHeaderCount="-1" maxHttpHeaderSize="65536" URIEncoding="UTF-8" … /> 
Hinweis: Wenn Sie diese Einstellung nicht vornehmen, kann es zu einer „Page not found“ Meldung im Browser kommen oder Probleme bei der Darstellung von z.B. Umlauten, wenn Sonderzeichen in einer URL verwendet werden, geben. 
4. NTP installieren 
Es ist zwingend erforderlich die Zeit auf allen beteiligten Servern innerhalb einer Windows Domäne synchron zu halten, da ansonsten die automatische Anmeldung nicht funktioniert. Auf einem Linux- Server wird dies über den NTP Dienst gewährleistet. Dieser Dienst wird über das integrierte Installations-Repository installiert: 
yum install ntp 
Anschließend wird der NTP Dämon für den automatischen Start aktiviert: 
chkconfig ntpd on 
Stellen Sie sicher dass die Zeit auf dem Apache System synchron mit dem Domain Controller läuft. 
5. Apache mit mod_auth_kerb installieren 
Für den Einsatz von Kerberos als Authentifizierungsprotokoll benötigt der Apache das Modul mod_auth_kerb. Dieses Modul wird zusammen mit Apache über das integrierte Installationsrepository installiert: 
yum install mod_auth_kerb 
Mit dem hinzufügen des HTTPD Dienstes in den Systemstart ist die Installation von Apache inkl. mod_auth_kerb abgeschlossen. 
chkconfig httpd on 
Dieser Artikel beschreibt nicht wie man Apache so konfiguriert, dass der Zugriff über HTTPS erfolgt. Hierzu gibt es bereits viele Beispiele im Internet zu finden.
6. Anpassung der Kerberos Systemkonfiguration 
Die Datei /etc/krb5.conf kann wie folgt konfiguriert werden: 
[logging] Default = FILE:/var/log/krb5libs.log Kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = MT-AG.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true default_tkt_enctypes = rc4-hmac default_tgs_enctypes = rc4-hmac [realms] MT-AG.COM = { kdc = mt-ag.com admin_server = MT-AG.COM default_domain = MT-AG.COM } 
[domain_realm] .mt-ag.com = MT-AG.COM mt-ag.com = MT-AG.COM 
Hinweise: 
- Hinter Kdc können statt der Domäne auch mehrere Hosts, getrennt durch ein Leerzeichen, eingetragen werden. 
- Ein Neustart von Apache ist nicht notwendig, damit die Änderungen in dieser Datei wirksam werden (die Datei wird pro Authentifizierungsvorgang erneut ausgelesen). 
7. Anpassung der Apache Konfiguration 
Die Konfiguration am Apache vornehmen, damit die APEX URL geschützt ist: 
/etc/httpd/conf/httpd.conf: 
LoadModule auth_kerb_module /etc/httpd/modules/mod_auth_kerb.so LoadModule proxy_module /etc/httpd/modules/mod_proxy.so LoadModule proxy_http_module /etc/httpd/modules/mod_proxy_http.so LoadModule headers_module /etc/httpd/modules/mod_headers.so # Schuetzt alle APEX Anfragen <Location /apex> AuthType Kerberos
AuthName "Kerberos Login" KrbAuthRealms MT-AG.COM KrbServiceName HTTP/apex.mt-ag.com@MT-AG.COM Krb5KeyTab /opt/httpkeytab/http_apex.mt-ag.com.keytab require valid-user # Wenn man eine Proxy-Direktive verwendet, dann wird REMOTE_USER nicht weitergeleitet, daher wird explizit APEX_USER als Variable gesetzt. RewriteEngine On RewriteCond %{LA-U:REMOTE_USER} (.+)$ # Wenn Sie die Windows Domaene nicht uebernehmen moechten, dann stattdessen diese Zeile aktivieren # RewriteCond %{REMOTE_USER} (.+)@.* RewriteRule . - [E=RU:%1] RequestHeader set APEX_USER %{RU}e 
# Weiterleiten von Anfragen an Oracle REST Data Services # Die Weiterleitung kann entweder mit HTTP(S) oder mittels AJP erfolgen. # In diesem Fall wird das ungesicherte Protokoll HTTP verwendet, da alles # auf einem Server laeuft. ProxyPass /apex http://localhost:8080/apex ProxyPassReverse /apex http://localhost:8080/apex </Location> # Statische Dateien von APEX Alias /i/ "/var/www/html/images/" 
Nach dieser Änderung ist ein Neustart von Apache vorzunehmen. 
Hinweis: 
- Im Verzeichnis /var/www/html/images sind die statischen Dateien von APEX zu hinterlegen. Diese befinden sich in der APEX Software unter /images. 
8. Authentifizierung in der APEX Anwendung 
Die APEX Anwendung sollte keine Anmeldeseite an den Browser zurückgeben, sondern die Identität annehmen, welche in der HTTP Header Variable „APEX_USER“ über Apache an APEX weitergegeben wird. Dafür muss ein neues Authentifizierungsschema für die APEX Anwendung erstellt werden:
Wenn APEX_USER leer ist, dann wird der Endanwender auf eine statische HTML Seite (index.html) auf Apache weitergeleitet. Diese Seite zeigt dem Endanwender beispielsweise den Text „Sie sind nicht an der Domäne angemeldet.“ an. 
9. Konfiguration Client PC 
Wenn sich die Webseite im Internet Explorer nicht in der Zone „lokales Intranet“ befindet oder der Benutzer nicht an der Windows Domäne angemeldet ist, wird der Benutzer in einer Dialogbox aufgefordert sich mit dem Benutzernamen und Passwort an der Windows Domäne anzumelden. Erst wenn die Webseite in der Zone "lokales Intranet" aufgenommen wurde und der Benutzer an der Windows Domäne angemeldet ist, erfolgt die Anmeldung über Kerberos automatisch.
Im Firefox kann diese Einstellung vorgenommen werden, indem als URL about:config aufgerufen wird. Die Domäne mt-ag.com ist im Atrribut network.negotiate-auth.trusted-uris einzutragen. 
Wenn alles richtig konfiguriert wurde, kann die APEX Anwendung mit einem Browser wie IE 10 oder Firefox 24 aufgerufen werden und die Anmeldung bei APEX erfolgt automatisch. 
Wichtig: Stellen Sie sicher, dass die Anfragen an den Hostnamen, hier apex.mt-ag.com, nicht an den Proxy-Server weitergeleitet werden, ansonsten kann das Kerberos Ticket „verloren“ gehen. Falls Sie
einen Proxy-Server im Browser konfiguriert haben, sollte daher der Hostname apex.mt-ag.com als Ausnahme hinterlegt werden, ansonsten erhalten Sie die Fehlermeldung „page not found“. 
Kontaktadresse: 
Niels de Bruijn Fachbereichsleiter APEX 
MT AG 
Balcke-Dürr-Allee 9 
40882 Ratingen 
Telefon: +49 (0) 2102 309 61 341 
Fax: +49 (0) 2102 309 61 101 
E-Mail niels.de.bruijn@mt-ag.com 
Internet: http://www.mt-ag.com / https://apex.mt-ag.com

Más contenido relacionado

La actualidad más candente

How to make APEX print through Node.js
How to make APEX print through Node.jsHow to make APEX print through Node.js
How to make APEX print through Node.jsDimitri Gielis
 
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)Amazon Web Services Korea
 
Agile Deployment using Git and AWS Elastic Beanstalk
Agile Deployment using Git and AWS Elastic BeanstalkAgile Deployment using Git and AWS Elastic Beanstalk
Agile Deployment using Git and AWS Elastic BeanstalkAmazon Web Services
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Olivier DASINI
 
Deploy, Manage, and Scale your Apps with AWS Elastic Beanstalk
Deploy, Manage, and Scale your Apps with AWS Elastic BeanstalkDeploy, Manage, and Scale your Apps with AWS Elastic Beanstalk
Deploy, Manage, and Scale your Apps with AWS Elastic BeanstalkAmazon Web Services
 
Oracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationOracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationDimitri Gielis
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitecturePaul Mooney
 
Get the Look and Feel You Want in Oracle APEX
Get the Look and Feel You Want in Oracle APEXGet the Look and Feel You Want in Oracle APEX
Get the Look and Feel You Want in Oracle APEXJorge Rimblas
 
Introduction to hibernate
Introduction to hibernateIntroduction to hibernate
Introduction to hibernatehr1383
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework tola99
 
AEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAshokkumar T A
 
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...Andrejs Prokopjevs
 
REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developersPatrick Savalle
 
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]Mikalai Alimenkou
 
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018Amazon Web Services Korea
 
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesGetting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesAmazon Web Services
 

La actualidad más candente (20)

How to make APEX print through Node.js
How to make APEX print through Node.jsHow to make APEX print through Node.js
How to make APEX print through Node.js
 
Introduction to Amazon EC2
Introduction to Amazon EC2Introduction to Amazon EC2
Introduction to Amazon EC2
 
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
AWS Batch를 통한 손쉬운 일괄 처리 작업 관리하기 - 윤석찬 (AWS 테크에반젤리스트)
 
Agile Deployment using Git and AWS Elastic Beanstalk
Agile Deployment using Git and AWS Elastic BeanstalkAgile Deployment using Git and AWS Elastic Beanstalk
Agile Deployment using Git and AWS Elastic Beanstalk
 
Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0Upgrade from MySQL 5.7 to MySQL 8.0
Upgrade from MySQL 5.7 to MySQL 8.0
 
Model View Controller (MVC)
Model View Controller (MVC)Model View Controller (MVC)
Model View Controller (MVC)
 
Deploy, Manage, and Scale your Apps with AWS Elastic Beanstalk
Deploy, Manage, and Scale your Apps with AWS Elastic BeanstalkDeploy, Manage, and Scale your Apps with AWS Elastic Beanstalk
Deploy, Manage, and Scale your Apps with AWS Elastic Beanstalk
 
Oracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integrationOracle Application Express (APEX) and Microsoft Sharepoint integration
Oracle Application Express (APEX) and Microsoft Sharepoint integration
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Get the Look and Feel You Want in Oracle APEX
Get the Look and Feel You Want in Oracle APEXGet the Look and Feel You Want in Oracle APEX
Get the Look and Feel You Want in Oracle APEX
 
Introduction to hibernate
Introduction to hibernateIntroduction to hibernate
Introduction to hibernate
 
Spring Framework
Spring Framework  Spring Framework
Spring Framework
 
AEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly toolsAEM - A Collection of developer friendly tools
AEM - A Collection of developer friendly tools
 
Spring Security 3
Spring Security 3Spring Security 3
Spring Security 3
 
AWS reInvent 2018 recap edition
AWS reInvent 2018 recap editionAWS reInvent 2018 recap edition
AWS reInvent 2018 recap edition
 
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
Optimize DR and Cloning with Logical Hostnames in Oracle E-Business Suite (OA...
 
REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developers
 
Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]Hexagonal architecture with Spring Boot [EPAM Java online conference]
Hexagonal architecture with Spring Boot [EPAM Java online conference]
 
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
AWS와 함께 하는 클라우드 비즈니스 (임성은 매니저, AWS) :: AWS TechShift 2018
 
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar SeriesGetting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
Getting Started With Continuous Delivery on AWS - AWS April 2016 Webinar Series
 

Similar a Echtes Single Sign-On mit APEX realisieren

MT AG: Sesam oeffne Dich
MT AG: Sesam oeffne DichMT AG: Sesam oeffne Dich
MT AG: Sesam oeffne DichMT AG
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebNiels de Bruijn
 
Azure Bootcamp Hamburg
Azure Bootcamp Hamburg Azure Bootcamp Hamburg
Azure Bootcamp Hamburg Lennart Passig
 
Webanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationWebanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationThomas Siegers
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenICS User Group
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1Oliver Lemm
 
Webinar SharePoint auf AWS
Webinar SharePoint auf AWSWebinar SharePoint auf AWS
Webinar SharePoint auf AWSAWS Germany
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroidsBlogwerk AG
 
Windows Server 8 - eine Vorschau
Windows Server 8 - eine VorschauWindows Server 8 - eine Vorschau
Windows Server 8 - eine VorschauDigicomp Academy AG
 
ANEO | Automatisierung mit RedHat Ansible
ANEO | Automatisierung mit RedHat AnsibleANEO | Automatisierung mit RedHat Ansible
ANEO | Automatisierung mit RedHat AnsibleCarolineAuerMarcher
 
Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Ulrich Krause
 
Installation von Composite C1 auf Windows Azure
Installation von Composite C1 auf Windows AzureInstallation von Composite C1 auf Windows Azure
Installation von Composite C1 auf Windows AzureCGN Cloud Company
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitStefan Witwicki
 
Cloud Lösungen für Apex
Cloud Lösungen für ApexCloud Lösungen für Apex
Cloud Lösungen für ApexStefan Witwicki
 
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...NETWAYS
 

Similar a Echtes Single Sign-On mit APEX realisieren (20)

MT AG: Sesam oeffne Dich
MT AG: Sesam oeffne DichMT AG: Sesam oeffne Dich
MT AG: Sesam oeffne Dich
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & Betrieb
 
Typo3 und Varnish
Typo3 und VarnishTypo3 und Varnish
Typo3 und Varnish
 
Azure Bootcamp Hamburg
Azure Bootcamp Hamburg Azure Bootcamp Hamburg
Azure Bootcamp Hamburg
 
Webanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und AdministrationWebanwendungen - Installation, Konfiguration und Administration
Webanwendungen - Installation, Konfiguration und Administration
 
SOA Suite 12c aus der Infrastruktur-Sicht
SOA Suite 12c aus der Infrastruktur-SichtSOA Suite 12c aus der Infrastruktur-Sicht
SOA Suite 12c aus der Infrastruktur-Sicht
 
Fehleranalyse in SCCM
Fehleranalyse in SCCMFehleranalyse in SCCM
Fehleranalyse in SCCM
 
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratorenIcsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
Icsug conf 14_tipps-und-skripts-fuer-ibm-connections-administratoren
 
REST mit APEX 18.1
REST mit APEX 18.1REST mit APEX 18.1
REST mit APEX 18.1
 
Webinar SharePoint auf AWS
Webinar SharePoint auf AWSWebinar SharePoint auf AWS
Webinar SharePoint auf AWS
 
Wordpress on steroids
Wordpress on steroidsWordpress on steroids
Wordpress on steroids
 
Node.js
Node.jsNode.js
Node.js
 
Windows Server 8 - eine Vorschau
Windows Server 8 - eine VorschauWindows Server 8 - eine Vorschau
Windows Server 8 - eine Vorschau
 
ANEO | Automatisierung mit RedHat Ansible
ANEO | Automatisierung mit RedHat AnsibleANEO | Automatisierung mit RedHat Ansible
ANEO | Automatisierung mit RedHat Ansible
 
Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1Keine Angst vor Sametime 8.5.1
Keine Angst vor Sametime 8.5.1
 
Installation von Composite C1 auf Windows Azure
Installation von Composite C1 auf Windows AzureInstallation von Composite C1 auf Windows Azure
Installation von Composite C1 auf Windows Azure
 
Apex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - HochverfügbarkeitApex on the Rocks - Hochverfügbarkeit
Apex on the Rocks - Hochverfügbarkeit
 
Cloud Lösungen für Apex
Cloud Lösungen für ApexCloud Lösungen für Apex
Cloud Lösungen für Apex
 
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
OSDC 2013 | Enterprise open source virtualization with oVirt and RHEV by René...
 
Einsteiger Workshop
Einsteiger WorkshopEinsteiger Workshop
Einsteiger Workshop
 

Más de MT AG

20160307 apex connects_jira
20160307 apex connects_jira20160307 apex connects_jira
20160307 apex connects_jiraMT AG
 
20160307 apex on_the_rocks
20160307 apex on_the_rocks20160307 apex on_the_rocks
20160307 apex on_the_rocksMT AG
 
20160308 apex sso
20160308 apex sso20160308 apex sso
20160308 apex ssoMT AG
 
MT AG Data Vault Generator
MT AG Data Vault GeneratorMT AG Data Vault Generator
MT AG Data Vault GeneratorMT AG
 
MT AG: 7 gute Gründe warum Apex
MT AG: 7 gute Gründe warum ApexMT AG: 7 gute Gründe warum Apex
MT AG: 7 gute Gründe warum ApexMT AG
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG
 
MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1MT AG
 
MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5MT AG
 
APEX & MTdoxx
APEX & MTdoxxAPEX & MTdoxx
APEX & MTdoxxMT AG
 
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machenDatenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machenMT AG
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?MT AG
 
Tune up your APEX
Tune up your APEXTune up your APEX
Tune up your APEXMT AG
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenMT AG
 
Five Finger Death Punch
Five Finger Death PunchFive Finger Death Punch
Five Finger Death PunchMT AG
 
Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.MT AG
 

Más de MT AG (15)

20160307 apex connects_jira
20160307 apex connects_jira20160307 apex connects_jira
20160307 apex connects_jira
 
20160307 apex on_the_rocks
20160307 apex on_the_rocks20160307 apex on_the_rocks
20160307 apex on_the_rocks
 
20160308 apex sso
20160308 apex sso20160308 apex sso
20160308 apex sso
 
MT AG Data Vault Generator
MT AG Data Vault GeneratorMT AG Data Vault Generator
MT AG Data Vault Generator
 
MT AG: 7 gute Gründe warum Apex
MT AG: 7 gute Gründe warum ApexMT AG: 7 gute Gründe warum Apex
MT AG: 7 gute Gründe warum Apex
 
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajaxMT AG: Ajax Rezepte fuer web services mit jquery und ajax
MT AG: Ajax Rezepte fuer web services mit jquery und ajax
 
MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1MT AG: Implementierungsvarianten mit-apex4.1
MT AG: Implementierungsvarianten mit-apex4.1
 
MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5MT AG Präsentation Rapid Application Development mit APEX 5
MT AG Präsentation Rapid Application Development mit APEX 5
 
APEX & MTdoxx
APEX & MTdoxxAPEX & MTdoxx
APEX & MTdoxx
 
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machenDatenmodellierung ist langweilig, lassen Sie Datamodeler das machen
Datenmodellierung ist langweilig, lassen Sie Datamodeler das machen
 
Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?Ist Gradle auch für die APEX-Projekte?
Ist Gradle auch für die APEX-Projekte?
 
Tune up your APEX
Tune up your APEXTune up your APEX
Tune up your APEX
 
Echtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisierenEchtes Single Sign-On mit APEX realisieren
Echtes Single Sign-On mit APEX realisieren
 
Five Finger Death Punch
Five Finger Death PunchFive Finger Death Punch
Five Finger Death Punch
 
Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.Dateien per Drag & Drop in APEX Applikationen ablegen.
Dateien per Drag & Drop in APEX Applikationen ablegen.
 

Echtes Single Sign-On mit APEX realisieren

  • 1. „Echtes“ Single Sign-On mit APEX Niels de Bruijn MT AG Ratingen Schlüsselworte Single Sign-On (SSO), Apache 2.x, Oracle Application Express 4.2.5 (APEX), Oracle REST Data Services 2.0.x (ORDS), Kerberos. Einleitung Man muss nur seine Webapplikation öffnen und schon ist die Anmeldung erfolgt! Ein Traum der nur selten in Unternehmen Wahrheit wird. Dabei lässt sich Single Sign-On (SSO) für interne (APEX) Webapplikationen in kürzerer Zeit und ohne Zusatzkosten einrichten. Bei einem Unternehmen mit 200 Mitarbeitern, die sich jeden Tag 15 Sekunden mit der Anmeldung an diversen APEX Applikationen beschäftigen müssen, lassen sich somit locker pro Jahr über 6 Personentage einsparen. Zentrale Benutzerverwaltung als Basis für Single Sign-On Der erste Schritt in Richtung wahres Single Sign-On ist die Einrichtung einer zentralen Ablage von Benutzerdaten. In fast allen Unternehmen ist zu diesem Zweck bereits ein LDAP Server wie beispielsweise das MS Active Directory vorhanden, der zentral gepflegt wird. In nur wenigen Minuten lässt sich auf dieser Basis die Authentifizierung über einen LDAP Server für eine APEX Anwendung einrichten (siehe Abbildung 1). Der Benutzer muss sich zwar noch pro APEX Anwendung mit seinem Benutzernamen und Passwort anmelden, das Passwort liegt in diesem Fall aber nicht mehr lokal in der Anwendung vor. Alleine dies spart in der Entwicklung Zeit und erhöht die IT Sicherheit. Scheidet beispielsweise ein Mitarbeiter aus, muss nur im LDAP Verzeichnis das Konto deaktiviert werden. Abb. 1: LDAP Authentifizierung für eine APEX Anwendung in einer Minute einrichten.
  • 2. Single Sign-On innerhalb APEX Anwendungen Sind alle APEX Anwendungen im gleichen APEX Workspace, dann lässt sich eine Art Single Sign- On schnell einrichten. Dazu ist in jeder APEX Anwendung unter „Shared Components > Authentication Scheme“ ein beliebiger Cookie Name einzutragen. Das Ergebnis ist, dass der Endanwender sich nur einmalig bei der ersten APEX Anwendung anmelden muss. Wechselt er in der gleichen Session die Anwendung, ist kein erneutes anmelden mehr notwendig. Abb. 2: Cookie Name in einer APEX Anwendung setzen „Echtes“ Single Sign-On Mit „echtem“ SSO ist in diesem Artikel gemeint, dass die Anmeldung nur einmalig auf Betriebssystemebene stattfindet und anschließend beliebige Applikationen gestartet werden können, ohne dass hierfür eine erneute Authentifizierung notwendig ist. Diese Variante implementieren Sie am besten, wenn die APEX Applikationen Workspace übergreifend vorliegen und/oder weitere (nicht APEX) Webapplikationen SSO fähig gemacht werden müssen. Damit dies funktioniert, müssen einige Voraussetzungen erfüllt sein. Erste Voraussetzung ist das vorhanden sein eines zentralen Authentifizierungsservers. In Linux/ Unix Umgebungen wird hierfür meist Samba eingesetzt, im Microsoft Umfeld ist Active Directory die Regel. Zweite Voraussetzung ist der Einsatz von einem Webserver wie Apache. Alle Anfragen werden vom Browser über Apache an APEX weitergeleitet. Ist der Benutzer auf Apache Ebene authentifiziert, wird durch APEX eine Session erstellt ohne den Endanwender mit einer Anmeldemaske zu konfrontieren. Durch die Vertrauensstellung zwischen der APEX Umgebung und Apache, wird die Identität angenommen die Apache über eine HTTP Header Variable weiterreicht.
  • 3. Abb. 3: Architektur für „echtes“ Single Sign-On. Und so wird es gemacht… Nachfolgend wird beispielhaft Schritt-für-Schritt gezeigt wie „echtes“ SSO für eine bestehende APEX Applikation erreicht wird. 1. DNS Eintrag für Apache Um die automatische Anmeldung über Kerberos nutzen zu können muss die Webseite über einen DNS Namen im Browser geöffnet werden. Dazu wird ein DNS Eintrag im DNS Server benötigt. In diesem Dokument gehen wir vom DNS Namen apex.mt-ag.com aus. Achten Sie darauf, dass der FQDN als (zusätzlicher) Host im DNS Server eingetragen wurde und nicht als Alias. Mit dem Befehl nslookup apex.mt-ag.com können Sie dies verifizieren. Ist der DNS Name als Alias eingetragen, erfolgt die SSO-Authentifizierung nicht über Kerberos, sondern wird mittels Basic Authentication durch die Eingabe des Benutzernamens und Passworts durchgeführt. 2. Kerberos Service Benutzer in Active Directory erstellen
  • 4. Für die Kerberos Authentifizierung wird ein aktives Computer-Konto, z.B. APEX_SSO, in Active Directory benötigt. Diesem wird anschließend mit folgendem Befehl der ServicePrincipalName des HTTP Dienstes hinzugefügt und eine Keytab-Datei erstellt: ktpass -princ HTTP/apex.mt-ag.com@MT-AG.COM -mapuser "CN=APEX_SSO,CN=Computers,DC=mt-ag,DC=com" -crypto All -ptype KRB5_NT_SRV_HST -pass <Passwort> -out c:http_apex.mt-ag.com.keytab Hinweise: - Obwohl es auch möglich ist ein Benutzerkonto zu verwenden, wird ein Computerkonto empfohlen, weil hiermit keine Anmeldung am Client möglich ist. - Die Domäne ist in diesem Beispiel MT-AG.COM und die Webadresse ist https://apex.mt- ag.com. - Der Befehl ktpass ist auf einem AD Domain Controller als Administrator auszuführen. - Das Passwort des Kontos wird neu gesetzt und in der Keytab-Datei gespeichert und kann daher beliebig gewählt werden. - Die Angabe apex.mt-ag.com bezieht sich auf die Webadresse, die im Browser durch den Endanwender eingegeben wird. - Obwohl die APEX Umgebung in diesem Beispiel ausschließlich über HTTPS zu erreichen sein wird, ist die Angabe HTTP hinter –princ korrekt. - Der Name für die Keytab-Datei kann beliebig gewählt werden. - Windows 2003 Server kennt die Angabe –crypto all nicht, daher kann stattdessen -crypto RC4- HMAC-NT angegeben werden.
  • 5. Die unter c: erstellte Datei benötigt der Apache und wird auf einem Linux Rechner beispielsweise nach /opt/httpkeytab kopiert. Dank dieser Datei ist es Apache erlaubt zu verifizieren, ob jemand bereits an der Windows Domäne angemeldet ist.
  • 6. 3. Konfiguration Tomcat Stellen Sie nach der Installation sicher dass in der Datei server.xml die folgenden Direktiven hinzugefügt sind: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" maxHeaderCount="-1" maxHttpHeaderSize="65536" URIEncoding="UTF-8" … /> Hinweis: Wenn Sie diese Einstellung nicht vornehmen, kann es zu einer „Page not found“ Meldung im Browser kommen oder Probleme bei der Darstellung von z.B. Umlauten, wenn Sonderzeichen in einer URL verwendet werden, geben. 4. NTP installieren Es ist zwingend erforderlich die Zeit auf allen beteiligten Servern innerhalb einer Windows Domäne synchron zu halten, da ansonsten die automatische Anmeldung nicht funktioniert. Auf einem Linux- Server wird dies über den NTP Dienst gewährleistet. Dieser Dienst wird über das integrierte Installations-Repository installiert: yum install ntp Anschließend wird der NTP Dämon für den automatischen Start aktiviert: chkconfig ntpd on Stellen Sie sicher dass die Zeit auf dem Apache System synchron mit dem Domain Controller läuft. 5. Apache mit mod_auth_kerb installieren Für den Einsatz von Kerberos als Authentifizierungsprotokoll benötigt der Apache das Modul mod_auth_kerb. Dieses Modul wird zusammen mit Apache über das integrierte Installationsrepository installiert: yum install mod_auth_kerb Mit dem hinzufügen des HTTPD Dienstes in den Systemstart ist die Installation von Apache inkl. mod_auth_kerb abgeschlossen. chkconfig httpd on Dieser Artikel beschreibt nicht wie man Apache so konfiguriert, dass der Zugriff über HTTPS erfolgt. Hierzu gibt es bereits viele Beispiele im Internet zu finden.
  • 7. 6. Anpassung der Kerberos Systemkonfiguration Die Datei /etc/krb5.conf kann wie folgt konfiguriert werden: [logging] Default = FILE:/var/log/krb5libs.log Kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = MT-AG.COM dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true default_tkt_enctypes = rc4-hmac default_tgs_enctypes = rc4-hmac [realms] MT-AG.COM = { kdc = mt-ag.com admin_server = MT-AG.COM default_domain = MT-AG.COM } [domain_realm] .mt-ag.com = MT-AG.COM mt-ag.com = MT-AG.COM Hinweise: - Hinter Kdc können statt der Domäne auch mehrere Hosts, getrennt durch ein Leerzeichen, eingetragen werden. - Ein Neustart von Apache ist nicht notwendig, damit die Änderungen in dieser Datei wirksam werden (die Datei wird pro Authentifizierungsvorgang erneut ausgelesen). 7. Anpassung der Apache Konfiguration Die Konfiguration am Apache vornehmen, damit die APEX URL geschützt ist: /etc/httpd/conf/httpd.conf: LoadModule auth_kerb_module /etc/httpd/modules/mod_auth_kerb.so LoadModule proxy_module /etc/httpd/modules/mod_proxy.so LoadModule proxy_http_module /etc/httpd/modules/mod_proxy_http.so LoadModule headers_module /etc/httpd/modules/mod_headers.so # Schuetzt alle APEX Anfragen <Location /apex> AuthType Kerberos
  • 8. AuthName "Kerberos Login" KrbAuthRealms MT-AG.COM KrbServiceName HTTP/apex.mt-ag.com@MT-AG.COM Krb5KeyTab /opt/httpkeytab/http_apex.mt-ag.com.keytab require valid-user # Wenn man eine Proxy-Direktive verwendet, dann wird REMOTE_USER nicht weitergeleitet, daher wird explizit APEX_USER als Variable gesetzt. RewriteEngine On RewriteCond %{LA-U:REMOTE_USER} (.+)$ # Wenn Sie die Windows Domaene nicht uebernehmen moechten, dann stattdessen diese Zeile aktivieren # RewriteCond %{REMOTE_USER} (.+)@.* RewriteRule . - [E=RU:%1] RequestHeader set APEX_USER %{RU}e # Weiterleiten von Anfragen an Oracle REST Data Services # Die Weiterleitung kann entweder mit HTTP(S) oder mittels AJP erfolgen. # In diesem Fall wird das ungesicherte Protokoll HTTP verwendet, da alles # auf einem Server laeuft. ProxyPass /apex http://localhost:8080/apex ProxyPassReverse /apex http://localhost:8080/apex </Location> # Statische Dateien von APEX Alias /i/ "/var/www/html/images/" Nach dieser Änderung ist ein Neustart von Apache vorzunehmen. Hinweis: - Im Verzeichnis /var/www/html/images sind die statischen Dateien von APEX zu hinterlegen. Diese befinden sich in der APEX Software unter /images. 8. Authentifizierung in der APEX Anwendung Die APEX Anwendung sollte keine Anmeldeseite an den Browser zurückgeben, sondern die Identität annehmen, welche in der HTTP Header Variable „APEX_USER“ über Apache an APEX weitergegeben wird. Dafür muss ein neues Authentifizierungsschema für die APEX Anwendung erstellt werden:
  • 9. Wenn APEX_USER leer ist, dann wird der Endanwender auf eine statische HTML Seite (index.html) auf Apache weitergeleitet. Diese Seite zeigt dem Endanwender beispielsweise den Text „Sie sind nicht an der Domäne angemeldet.“ an. 9. Konfiguration Client PC Wenn sich die Webseite im Internet Explorer nicht in der Zone „lokales Intranet“ befindet oder der Benutzer nicht an der Windows Domäne angemeldet ist, wird der Benutzer in einer Dialogbox aufgefordert sich mit dem Benutzernamen und Passwort an der Windows Domäne anzumelden. Erst wenn die Webseite in der Zone "lokales Intranet" aufgenommen wurde und der Benutzer an der Windows Domäne angemeldet ist, erfolgt die Anmeldung über Kerberos automatisch.
  • 10. Im Firefox kann diese Einstellung vorgenommen werden, indem als URL about:config aufgerufen wird. Die Domäne mt-ag.com ist im Atrribut network.negotiate-auth.trusted-uris einzutragen. Wenn alles richtig konfiguriert wurde, kann die APEX Anwendung mit einem Browser wie IE 10 oder Firefox 24 aufgerufen werden und die Anmeldung bei APEX erfolgt automatisch. Wichtig: Stellen Sie sicher, dass die Anfragen an den Hostnamen, hier apex.mt-ag.com, nicht an den Proxy-Server weitergeleitet werden, ansonsten kann das Kerberos Ticket „verloren“ gehen. Falls Sie
  • 11. einen Proxy-Server im Browser konfiguriert haben, sollte daher der Hostname apex.mt-ag.com als Ausnahme hinterlegt werden, ansonsten erhalten Sie die Fehlermeldung „page not found“. Kontaktadresse: Niels de Bruijn Fachbereichsleiter APEX MT AG Balcke-Dürr-Allee 9 40882 Ratingen Telefon: +49 (0) 2102 309 61 341 Fax: +49 (0) 2102 309 61 101 E-Mail niels.de.bruijn@mt-ag.com Internet: http://www.mt-ag.com / https://apex.mt-ag.com