SlideShare a Scribd company logo
@_openknowledge #WISSENTEILEN
SState of the Art Authentication
mit Java EE 8
Ausführliches Beispiel mit Code Beispiel
auf unserem Blog verfügbar.
www.openknowledge.de/blog
www.github.com/openknowledge
@_openknowledge
ÜBER MICH
• Software-Entwickler
• Speaker
• CI / CD Flüsterer
• Angular(-ität)
• Java EE
Christian Schulz
#WISSENTEILEN
ÜBER OPEN KNOWLEDGE
Branchenneutrale Softwareentwicklung und IT-Beratung
#WISSENTEILEN
Authentication
JSON Web Token
OpenID Connect
Single-Sign On
SAML
Am Anfang war …
… die web.xml
<login-config>
<auth-method> </auth-method>
<realm-name>MyCustomRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/error.xhtml</form-error-page>
</form-login-config>
</login-config>
FORM
#WISSENTEILEN
Woher kommen die Login-
Informationen?
JAAS LoginModule
#WISSENTEILEN
JAAS LoginModule
• Implementierung des Interfaces
javax.security.auth.spi.LoginModule
#WISSENTEILEN
JAAS LoginModule
• Implementierung des Interfaces
javax.security.auth.spi.LoginModule
• Befüllen eines javax.security.auth.Subjects mit
java.security.Principals
#WISSENTEILEN
JAAS LoginModule
• Implementierung des Interfaces
javax.security.auth.spi.LoginModule
• Befüllen eines javax.security.auth.Subjects mit
java.security.Principals
• Two-Phase-Authentication
#WISSENTEILEN
JAAS LoginModule
• Implementierung des Interfaces
javax.security.auth.spi.LoginModule
• Befüllen eines javax.security.auth.Subjects mit
java.security.Principals
• Two-Phase-Authentication
• 1. Phase: Kann das Modul authentifizieren?
#WISSENTEILEN
JAAS LoginModule
• Implementierung des Interfaces
javax.security.auth.spi.LoginModule
• Befüllen eines javax.security.auth.Subjects mit
java.security.Principals
• Two-Phase-Authentication
• 1. Phase: Kann das Modul authentifizieren?
• 2. Phase: Login erfolgreich → Befüllen des Subjects
#WISSENTEILEN
LoginModule in Tomcat
META-INF/context.xml
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="MyCustomLogin"
... />
</Context>
jaas.config (Starten mit -Djava.security.auth.login.config=jaas.config)
MyCustomLogin {
de.openknowledge...CustomLoginModule required;
};
#WISSENTEILEN
LoginModule in Tomcat
META-INF/context.xml
<Context>
<Realm className="org.apache.catalina.realm.JAASRealm"
appName="MyCustomLogin"
... />
</Context>
jaas.config (Starten mit -Djava.security.auth.login.config=jaas.config)
MyCustomLogin {
de.openknowledge...CustomLoginModule required;
};
#WISSENTEILEN
JAAS LoginModule – Nachteile
#WISSENTEILEN
JAAS LoginModule – Nachteile
• Umständliche API
#WISSENTEILEN
JAAS LoginModule – Nachteile
• Umständliche API
Callback[] callbacks = new Callback [] {
new NameCallback("Username"),
new PasswordCallback("Password", false)
};
callbackHandler.handle(callbacks);
String username = ((NameCallback)callbacks[0]).getName();
String password =
new String(((PasswordCallback)callbacks[1]).getPassword());
#WISSENTEILEN
JAAS LoginModule – Nachteile
• Umständliche API
• Container spezifische Konfiguration
Callback[] callbacks = new Callback [] {
new NameCallback("Username"),
new PasswordCallback("Password", false)
};
callbackHandler.handle(callbacks);
String username = ((NameCallback)callbacks[0]).getName();
String password =
new String(((PasswordCallback)callbacks[1]).getPassword());
#WISSENTEILEN
Und in der Cloud?
Java EE 8 – Security API 1.0
Java EE 8 – IdentityStore
public interface IdentityStore {
CredentialValidationResult validate(Credential credential);
Set<String> getCallerGroups(CredentialValidationResult result);
int priority();
Set<ValidationType> validationTypes();
enum ValidationType { VALIDATE, PROVIDE_GROUPS }
}
#WISSENTEILEN
Java EE 8 – IdentityStore
@LdapIdentityStoreDefinition(
url = "ldap://localhost:3268",
bindDn = "readonly@openknownledge",
bindDnPassword = "password"
)
@DatabaseIdentityStoreDefinition(
dataSourceLookup = "java:jboss/datasources/ExampleDS",
callerQuery = "SELECT password from USERS where name = ?"
)
#WISSENTEILEN
Java EE 8 – CredentialValidationResult
public class CredentialValidationResult {
public Status getStatus() {...}
public CallerPrincipal getCallerPrincipal() {...}
public Set<String> getCallerGroups() {...}
public enum Status { NOT_VALIDATED, INVALID, VALID }
}
#WISSENTEILEN
Java EE 8 – HttpAuthenticationMechanism
public interface HttpAuthenticationMechanism {
AuthenticationStatus validateRequest(
HttpServletRequest request,
HttpServletResponse response,
HttpMessageContext httpMessageContext) throws Auth...Exception;
AuthenticationStatus secureResponse(...) ...
void cleanSubject(...);
}
#WISSENTEILEN
Java EE 8 – HttpAuthenticationMechanism
#WISSENTEILEN
Java EE 8 – HttpAuthenticationMechanism
• Ersetzt Eintrag in web.xml
#WISSENTEILEN
Java EE 8 – HttpAuthenticationMechanism
• Ersetzt Eintrag in web.xml
• Standardimplementierungen via Annotation
#WISSENTEILEN
Java EE 8 – HttpAuthenticationMechanism
• Ersetzt Eintrag in web.xml
• Standardimplementierungen via Annotation
• BasicAuthenticationMechanism
• FormAuthenticationMechanism
• CustomFormAuthenticationMechanism
#WISSENTEILEN
JASPIC
#WISSENTEILEN
JASPIC
• Java Authentication Service Provider Interface for Containers
#WISSENTEILEN
JASPIC
• Java Authentication Service Provider Interface for Containers
• Container-unabhängiges Login möglich
#WISSENTEILEN
JASPIC
• Java Authentication Service Provider Interface for Containers
• Container-unabhängiges Login möglich
→Implementierung des Interfaces ServerAuthModule
#WISSENTEILEN
JASPIC
• Java Authentication Service Provider Interface for Containers
• Container-unabhängiges Login möglich
→Implementierung des Interfaces ServerAuthModule
• Unterstützung verschiedener Kommunikations-Szenarien
(neben HTTP noch RMI/Remote-EJB, JMS, ...)
• Implementierung umständlich und aufwändig
• In der Praxis selten genutzt
#WISSENTEILEN
Java EE 8 – Security 1.0
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
• Aufsatz auf das JASPIC ServerAuthModule
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
• Aufsatz auf das JASPIC ServerAuthModule
• dadurch Java EE 7 kompatibel
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
• Aufsatz auf das JASPIC ServerAuthModule
• dadurch Java EE 7 kompatibel
• Nutzt IdentityStore(Handler)
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
• Aufsatz auf das JASPIC ServerAuthModule
• dadurch Java EE 7 kompatibel
• Nutzt IdentityStore(Handler)
• Nur für HTTP-Authentication
#WISSENTEILEN
Java EE 8 – Security 1.0
• JSR 375
• Aufsatz auf das JASPIC ServerAuthModule
• dadurch Java EE 7 kompatibel
• Nutzt IdentityStore(Handler)
• Nur für HTTP-Authentication
• Referenzimplementierung Soteria von GlassFish
#WISSENTEILEN
Was ist mit Token-basierten
Authentifizierungsmethoden wie
z.B. JSON Web Token?
Token-basierte Authentication
#WISSENTEILEN
Warum JWT?
• … vs. SWT
• … vs. SAML
• public / private Key-Pair
• extrem kompakt
• JSON
#WISSENTEILEN
JSON Web Token
#WISSENTEILEN
JSON Web Token
#WISSENTEILEN
JSON Web Token
#WISSENTEILEN
JSON Web Token
#WISSENTEILEN
JSON Web Token
#WISSENTEILEN
UND WIE JETZT IN JAVA EE?
Authentication Ablauf
#WISSENTEILEN
Authentication Ablauf
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
Authentication AblaufHttpAuthenticationMechanism
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(
HttpServletRequest request,
HttpServletResponse response,
HttpMessageContext context) {
if (!context.isProtected()) {
// unprotected api call
return context.doNothing();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(
HttpServletRequest request,
HttpServletResponse response,
HttpMessageContext context) {
if (!context.isProtected()) {
// unprotected api call
return context.doNothing();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(
HttpServletRequest request,
HttpServletResponse response,
HttpMessageContext context) {
if (!context.isProtected()) {
// unprotected api call
return context.doNothing();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
String header =
request.getHeader(HttpHeaders.AUTHORIZATION);
if (header == null) {
LOGGER.log(Level.WARNING, "Authorization header is missing");
return context.responseUnauthorized();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
String header =
request.getHeader(HttpHeaders.AUTHORIZATION);
if (header == null) {
LOGGER.log(Level.WARNING, "Authorization header is missing");
return context.responseUnauthorized();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
if (!isValidAuthorizationHeader(header)) {
LOGGER.log(Level.WARNING, "Authorization header is invalid");
return context.responseUnauthorized();
}
…
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
String[] headerComponents = header.split(" ");
String token = headerComponents[1];
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
return context.responseUnauthorized();
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
String[] headerComponents = header.split(" ");
String token = headerComponents[1];
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
return context.responseUnauthorized();
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
String[] headerComponents = header.split(" ");
String token = headerComponents[1];
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
return context.responseUnauthorized();
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
String[] headerComponents = header.split(" ");
String token = headerComponents[1];
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
return context.responseUnauthorized();
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
String[] headerComponents = header.split(" ");
String token = headerComponents[1];
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
return context.responseUnauthorized();
}
#WISSENTEILEN
FAZIT AUTHENTICATION IN JAVA EE 8
FAZIT AUTHENTICATION IN JAVA EE 8
Eigene Nutzerquelle ohne Container-Config
FAZIT AUTHENTICATION IN JAVA EE 8
Eigene Nutzerquelle ohne Container-Config
Standard-Mechanismen weiterhin möglich
FAZIT AUTHENTICATION IN JAVA EE 8
Eigene Nutzerquelle ohne Container-Config
Standard-Mechanismen weiterhin möglich
Support für RememberMe
FAZIT AUTHENTICATION IN JAVA EE 8
Eigene Nutzerquelle ohne Container-Config
Standard-Mechanismen weiterhin möglich
Support für RememberMe
Leichte Erweiterbarkeit für HTTP-basierte Mechanismen
Authorization
Domain-Object-Security
Access-Control Lists
Beispielanwendung
E-Learning Plattform
#WISSENTEILEN
Teacher 1
Users
Student 1
...
#WISSENTEILEN
Teacher 1
Users Permissions
Student 1 Read Course
...
...
#WISSENTEILEN
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Role based Access Control
Roles
Teacher 1
Users Permissions
Student 1 Read Course
Teacher
Student
...
...
#WISSENTEILEN
Role based Access Control
Servlet Spec
→Permissions für Web-Resources
#WISSENTEILEN
Role based Access Control
web.xml / Annotations
<security-constraint>
<web-resource-name>courses API</…>
<url-pattern>/api/protected/courses</…>
<auth-constraint>
<role-name>TEACHER</…>
</auth-constraint>
</security-constraint>
@ServletSecurity(
@HttpConstraint(rolesAllowed = {"TEACHER"})
)
#WISSENTEILEN
Role based Access Control
Servlet Spec
→Permissions für Web-Resources
#WISSENTEILEN
Role based Access Control
Servlet Spec
→Permissions für Web-Resources
Java EE Security
→Permissions für Klassen und Methoden
via @RolesAllowed
Standard unterstützt kein JAX-RS
#WISSENTEILEN
Role based Access Control
Servlet Spec
→Permissions für Web-Resources
Java EE Security
→Permissions für Klassen und Methoden
via @RolesAllowed
Standard unterstützt kein JAX-RS
Java EE 8 Security
→Standard-Mapping für User und Rollen
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
…
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
…
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
…
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
…
}
String username = jwt.getSubject();
List<String> roles = jwt.getClaim("roles").asList(String.class);
return context.notifyContainerAboutLogin(
username, new HashSet<>(roles));
} catch (JWTVerificationException e) {…}
…
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
…
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
…
}
String username = jwt.getSubject();
List<String> roles = jwt.getClaim("roles").asList(String.class);
return context.notifyContainerAboutLogin(
username, new HashSet<>(roles));
} catch (JWTVerificationException e) {…}
…
}
#WISSENTEILEN
JwtAuthenticationMechanism
public AuthenticationStatus validateRequest(…) {
…
try {
…
DecodedJWT jwt = tokenProvider.verifyAndDecodeJwt(token);
return context.notifyContainerAboutLogin(
jwt.getSubject(), new HashSet<>());
} catch (JWTVerificationException e) {…}
…
}
String username = jwt.getSubject();
List<String> roles = jwt.getClaim("roles").asList(String.class);
return context.notifyContainerAboutLogin(
username, new HashSet<>(roles));
} catch (JWTVerificationException e) {…}
…
}
#WISSENTEILEN
StudentResource
#WISSENTEILEN
StudentResource
• createStudent
POST
api/protected/students
#WISSENTEILEN
StudentResource
• createStudent
POST
api/protected/students
• getStudents
GET
api/protected/students
#WISSENTEILEN
StudentResource
• createStudent
POST
api/protected/students
• getStudents
GET
api/protected/students
• zwei Rollen pro Methode in einer web.xml?
#WISSENTEILEN
StudentResource
• createStudent
POST
api/protected/students
• getStudents
GET
api/protected/students
• zwei Rollen pro Methode in einer web.xml?
• Es gibt doch nur Pfade?!
#WISSENTEILEN
Role based Access Control
web.xml
<security-constraint>
<web-resource-name>studens API</…>
<url-pattern>/api/protected/students</…>
<auth-constraint>
<role-name>TEACHER</…>
<role-name>STUDENTS</…>
</auth-constraint>
</security-constraint>
#WISSENTEILEN
Role based Access Control
web.xml
<security-constraint>
<web-resource-name>studens API</…>
<url-pattern>/api/protected/students</…>
<auth-constraint>
<role-name>TEACHER</…>
<role-name>STUDENTS</…>
</auth-constraint>
</security-constraint>
#WISSENTEILEN
Role based Access Control
web.xml
<security-constraint>
<web-resource-name>studens API</…>
<url-pattern>/api/protected/students</…>
<auth-constraint>
<role-name>TEACHER</…>
<role-name>STUDENTS</…>
</auth-constraint>
</security-constraint>
Rechtevergabe auf Methodenebene notwendig!
#WISSENTEILEN
RolesAllowedFilter
@Provider
@Priority(Priorities.AUTHENTICATION)
public class RolesAllowedFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Inject
private User user;
@Override
public void filter(ContainerRequestContext requestContext) {
#WISSENTEILEN
RolesAllowedFilter
@Provider
@Priority(Priorities.AUTHENTICATION)
public class RolesAllowedFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Inject
private User user;
@Override
public void filter(ContainerRequestContext requestContext) {
#WISSENTEILEN
RolesAllowedFilter
@Provider
@Priority(Priorities.AUTHENTICATION)
public class RolesAllowedFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Inject
private User user;
@Override
public void filter(ContainerRequestContext requestContext) {
#WISSENTEILEN
RolesAllowedFilter
@Provider
@Priority(Priorities.AUTHENTICATION)
public class RolesAllowedFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Inject
private User user;
@Override
public void filter(ContainerRequestContext requestContext) {
#WISSENTEILEN
Java EE 8 Security Context
• Pre Java EE 8: Jede Spec hat ihre eigene Variante
• Servlet - HttpServletRequest#getUserPrincipal, HttpServletRequest#isUserInRole
• EJB - EJBContext#getCallerPrincipal, EJBContext#isCallerInRole
• JAX-WS - WebServiceContext#getUserPrincipal, WebServiceContext#isUserInRole
• JAX-RS - SecurityContext#getUserPrincipal, SecurityContext#isUserInRole
• JSF - ExternalContext#getUserPrincipal, ExternalContext#isUserInRole
• CDI - @Inject Principal
• WebSockets - Session#getUserPrincipal
• Vereinheitlichung in Java EE 8
#WISSENTEILEN
Java EE 8 Security Context
public interface SecurityContext {
Principal getCallerPrincipal();
<T extends Principal> Set<T> getPrincipalsByType(Class<T> pType);
boolean isCallerInRole(String role);
boolean hasAccessToWebResource(String resource, String... methods);
AuthenticationStatus authenticate(HttpServletRequest request,
HttpServletResponse response,
AuthenticationParameters parameters);
}
#WISSENTEILEN
RolesAllowedFilter
@Provider
@Priority(Priorities.AUTHENTICATION)
public class RolesAllowedFilter implements ContainerRequestFilter {
@Context
private ResourceInfo resourceInfo;
@Inject
private SecurityContext securityContext;
@Override
public void filter(ContainerRequestContext requestContext) {
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
RolesAllowed rolesAllowed =
resourceInfo.getResourceClass()
.getAnnotation(RolesAllowed.class);
RolesAllowed rolesAllowedMethod =
resourceInfo.getResourceMethod()
.getAnnotation(RolesAllowed.class);
if (rolesAllowedMethod != null) {
rolesAllowed = rolesAllowedMethod;
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
RolesAllowed rolesAllowed =
resourceInfo.getResourceClass()
.getAnnotation(RolesAllowed.class);
RolesAllowed rolesAllowedMethod =
resourceInfo.getResourceMethod()
.getAnnotation(RolesAllowed.class);
if (rolesAllowedMethod != null) {
rolesAllowed = rolesAllowedMethod;
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
RolesAllowed rolesAllowed =
resourceInfo.getResourceClass()
.getAnnotation(RolesAllowed.class);
RolesAllowed rolesAllowedMethod =
resourceInfo.getResourceMethod()
.getAnnotation(RolesAllowed.class);
if (rolesAllowedMethod != null) {
rolesAllowed = rolesAllowedMethod;
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
RolesAllowed rolesAllowed =
resourceInfo.getResourceClass()
.getAnnotation(RolesAllowed.class);
RolesAllowed rolesAllowedMethod =
resourceInfo.getResourceMethod()
.getAnnotation(RolesAllowed.class);
if (rolesAllowedMethod != null) {
rolesAllowed = rolesAllowedMethod;
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
…
if (rolesAllowed != null &&
Arrays
.stream(rolesAllowed.value())
.noneMatch(s -> securityContext.isCallerInRole(s))
) {
requestContext.abortWith(
Response.status(Response.Status.FORBIDDEN).build()
);
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
…
if (rolesAllowed != null &&
Arrays
.stream(rolesAllowed.value())
.noneMatch(s -> securityContext.isCallerInRole(s))
) {
requestContext.abortWith(
Response.status(Response.Status.FORBIDDEN).build()
);
}
#WISSENTEILEN
RolesAllowedFilter
public void filter(ContainerRequestContext requestContext) {
…
if (rolesAllowed != null &&
Arrays
.stream(rolesAllowed.value())
.noneMatch(s -> securityContext.isCallerInRole(s))
) {
requestContext.abortWith(
Response.status(Response.Status.FORBIDDEN).build()
);
}
#WISSENTEILEN
RolesAllowedFilter
#WISSENTEILEN
RolesAllowedFilter
• Kein Standard
https://github.com/eclipse-ee4j/jaxrs-api/issues/563
#WISSENTEILEN
RolesAllowedFilter
• Kein Standard
https://github.com/eclipse-ee4j/jaxrs-api/issues/563
• RESTeasy bringt Filter mit
#WISSENTEILEN
RolesAllowedFilter
• Kein Standard
https://github.com/eclipse-ee4j/jaxrs-api/issues/563
• RESTeasy bringt Filter mit
• Eigene Implementierung für andere JAX-RS Implementierungen möglich
#WISSENTEILEN
Kurs anlegen
@RolesAllowed("TEACHER")
public Course create(Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
#WISSENTEILEN
Kurs anlegen
@RolesAllowed("TEACHER")
public Course create(Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
#WISSENTEILEN
Kurs anlegen
@RolesAllowed("TEACHER")
public Course create(Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
Role Based Access Control reicht nicht aus!
#WISSENTEILEN
Kurs anlegen
@Inject
private Principal currentPrincipal;
public Course create(Teacher lecturer, …) {
if (!lecturer.equals(currentPrincipal)) {
throw new SecurityException(…);
}
…
}
#WISSENTEILEN
Kurs anlegen
@Inject
private Principal currentPrincipal;
public Course create(Teacher lecturer, …) {
if (!lecturer.equals(currentPrincipal)) {
throw new SecurityException(…);
}
…
}
Sicherheitsüberprüfungen im Code verteilt! 
#WISSENTEILEN
Gibt es
Alternativen zu Role Based
Access Control?
SAUTHORIZATION – Ausblick
SAUTHORIZATION – Ausblick
Role-Based – Java EE Standard
SAUTHORIZATION – Ausblick
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
SAUTHORIZATION – Ausblick
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
Method-Based – Spring & Deltaspike Security
SAUTHORIZATION – Ausblick
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
Method-Based – Spring & Deltaspike Security
Domain-Object-Based – Deltaspike & JPA Security
ACCESS-CONTROL LIST
Object
Access-Control List
#WISSENTEILEN
ACCESS-CONTROL LIST
Object
Entry
Access-Control List
......
User 1
User 2
User 3
#WISSENTEILEN
DeltaSpike Security
@Create
public Course create(
@Owner Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
#WISSENTEILEN
DeltaSpike Security
@Create
public Course create(
@Owner Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
#WISSENTEILEN
DeltaSpike Security
@Create
public Course create(
@Owner Teacher lecturer, …) {
Course course = new Course(lecturer, …);
entityManager.persist(course);
return course;
}
#WISSENTEILEN
Eigene Security-Annotation
@SecurityBindingType
@Retention(RUNTIME)
public @interface Create {
}
@SecurityParameterBinding
@Retention(RUNTIME)
public @interface Owner {
}
#WISSENTEILEN
Eigene Security-Annotation
@SecurityBindingType
@Retention(RUNTIME)
public @interface Create {
}
@SecurityParameterBinding
@Retention(RUNTIME)
public @interface Owner {
}
#WISSENTEILEN
Separate Logik-Implementierung
public class SecurityRules {
@Secures @Create
public boolean checkOwner(@Owner User owner,
Identity user) {
return owner.equals(user);
}
}
#WISSENTEILEN
Separate Logik-Implementierung
public class SecurityRules {
@Secures @Create
public boolean checkOwner(@Owner User owner,
Identity user) {
return owner.equals(user);
}
}
#WISSENTEILEN
Separate Logik-Implementierung
public class SecurityRules {
@Secures @Create
public boolean checkOwner(@Owner User owner,
Identity user) {
return owner.equals(user);
}
}
#WISSENTEILEN
Separate Logik-Implementierung
public class SecurityRules {
@Secures @Create
public boolean checkOwner(@Owner User owner,
Identity user) {
return owner.equals(user);
}
}
#WISSENTEILEN
JPA Security
Security Framework für JPA
https://github.com/ArneLimburg/jpasecurity
• Pluggable Authentication
• Authorization
• Access-Check bei CRUD-Operationen
• In-Database-Filtern von Queries (JPQL und Criteria)
#WISSENTEILEN
@Permit(access = AccessType.CREATE,
rule = "lecturer = CURRENT_PRINCIPAL")
@Entity
public Course {
…
}
Entity-Security mit JPA Security
#WISSENTEILEN
@Permit(access = AccessType.CREATE,
rule = "lecturer = CURRENT_PRINCIPAL")
@Entity
public Course {
…
}
Entity-Security mit JPA Security
#WISSENTEILEN
@Permit(access = AccessType.CREATE,
rule = "lecturer = CURRENT_PRINCIPAL")
@Entity
public Course {
…
}
Entity-Security mit JPA Security
#WISSENTEILEN
@Permit(access = AccessType.CREATE,
rule = "lecturer = CURRENT_PRINCIPAL")
@Entity
public Course {
…
}
Entity-Security mit JPA Security
#WISSENTEILEN
@Permit(access = AccessType.CREATE,
rule = "lecturer = CURRENT_PRINCIPAL")
@Entity
public Course {
…
}
Automatischer Check bei entityManager.persist(…) oder
entityManager.merge(…) oder bei Cascading!
Entity-Security mit JPA Security
#WISSENTEILEN
Entity-Security mit JPA Security
public List<Student> findAll() {
TypedQuery<Student> query
= entityManager.createQuery("SELECT s FROM Student s", …);
return query.getResultList();
}
#WISSENTEILEN
Entity-Security mit JPA Security
public List<Student> findAll() {
TypedQuery<Student> query
= entityManager.createQuery("SELECT s FROM Student s", …);
return query.getResultList();
}
Lehrer darf nur Studenten aus seinen eigenen Kursen sehen.
#WISSENTEILEN
Entity-Security mit JPA Security
public List<Student> findAll() {
TypedQuery<Student> query
= entityManager.createNamedQuery(…, …);
return query.getResultList();
}
Automatische Filterung von JPA Queries und Criterias!
#WISSENTEILEN
@PermitAny({
@Permit(access = AccessType.READ, rule
= "this IN (SELECT p"
+ " FROM Course course"
+ " JOIN course.participants p"
+ " WHERE course.lecturer"
+ " = CURRENT_PRINCIPAL)"),
@Permit(…)})
@Entity
public Student {
…
Entity-Security mit JPA Security
#WISSENTEILEN
Entity-Security mit JPA Security
public List<Student> findAll() {
TypedQuery<Student> query
= entityManager.createQuery("SELECT s FROM Student s", …);
return query.getResultList();
}
erzeugt
SELECT s FROM Student s WHERE s IN (SELECT p FROM Course course
JOIN course.participants p
WHERE course.lecturer
= CURRENT_PRINCIPAL) …
#WISSENTEILEN
SAUTHORIZATION – Fazit
SAUTHORIZATION – Fazit
Role-Based – Java EE Standard
SAUTHORIZATION – Fazit
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
SAUTHORIZATION – Fazit
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
Method-Based – Spring & Deltaspike Security
SAUTHORIZATION – Fazit
Role-Based – Java EE Standard
Access-Control-Lists – Spring Security
Method-Based – Spring & Deltaspike Security
Domain-Object-Based – Deltaspike & JPA Security
FRAGEN
@_openknowledge#WISSENTEILEN
KONTAKT
Christian Schulz,
Enterprise Developer
christian.schulz@openknowledge.de
+49 (0)441 4082 – 146
Icons in this presentation designed by “Freepik”, “Nice and Serious” and “Elegant Themes” from www.flaticon.com.
OFFENKUNDIGGUT
#WISSENTEILEN

More Related Content

What's hot

Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
Jesus Perez Franco
 
Web Authentication API
Web Authentication APIWeb Authentication API
Web Authentication API
FIDO Alliance
 
Introduction to Self Sovereign Identity
Introduction to Self Sovereign IdentityIntroduction to Self Sovereign Identity
Introduction to Self Sovereign Identity
Heather Vescent
 
SRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call CultureSRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call Culture
smalltown
 
Terraform on Azure
Terraform on AzureTerraform on Azure
Terraform on Azure
Julien Corioland
 
Kubernetes and container security
Kubernetes and container securityKubernetes and container security
Kubernetes and container security
Volodymyr Shynkar
 
Log Stealers - Shopping time for Threat Actors!
Log Stealers - Shopping time for Threat Actors!Log Stealers - Shopping time for Threat Actors!
Log Stealers - Shopping time for Threat Actors!
Speck&Tech
 
Racing The Web - Hackfest 2016
Racing The Web - Hackfest 2016Racing The Web - Hackfest 2016
Racing The Web - Hackfest 2016
Aaron Hnatiw
 
HashiCorp's Vault - The Examples
HashiCorp's Vault - The ExamplesHashiCorp's Vault - The Examples
HashiCorp's Vault - The Examples
Michał Czeraszkiewicz
 
Hashicorp Vault ppt
Hashicorp Vault pptHashicorp Vault ppt
Hashicorp Vault ppt
Shrey Agarwal
 
Webauthn Tutorial
Webauthn TutorialWebauthn Tutorial
Webauthn Tutorial
FIDO Alliance
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
Rudy De Busscher
 
Jwt Security
Jwt SecurityJwt Security
Jwt Security
Seid Yassin
 
Advanced Sql Injection ENG
Advanced Sql Injection ENGAdvanced Sql Injection ENG
Advanced Sql Injection ENGDmitry Evteev
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API Gateway
Yohann Ciurlik
 
Secret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s VaultSecret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s Vault
AWS Germany
 
Docker Container Security
Docker Container SecurityDocker Container Security
Docker Container Security
Suraj Khetani
 
Kubernetes Secrets Management on Production with Demo
Kubernetes Secrets Management on Production with DemoKubernetes Secrets Management on Production with Demo
Kubernetes Secrets Management on Production with Demo
Opsta
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and Wilma
Dalton Valadares
 

What's hot (20)

Spring Security 5
Spring Security 5Spring Security 5
Spring Security 5
 
Web Authentication API
Web Authentication APIWeb Authentication API
Web Authentication API
 
Introducing ELK
Introducing ELKIntroducing ELK
Introducing ELK
 
Introduction to Self Sovereign Identity
Introduction to Self Sovereign IdentityIntroduction to Self Sovereign Identity
Introduction to Self Sovereign Identity
 
SRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call CultureSRE Conference 2022 - How to Build a Healthy On-Call Culture
SRE Conference 2022 - How to Build a Healthy On-Call Culture
 
Terraform on Azure
Terraform on AzureTerraform on Azure
Terraform on Azure
 
Kubernetes and container security
Kubernetes and container securityKubernetes and container security
Kubernetes and container security
 
Log Stealers - Shopping time for Threat Actors!
Log Stealers - Shopping time for Threat Actors!Log Stealers - Shopping time for Threat Actors!
Log Stealers - Shopping time for Threat Actors!
 
Racing The Web - Hackfest 2016
Racing The Web - Hackfest 2016Racing The Web - Hackfest 2016
Racing The Web - Hackfest 2016
 
HashiCorp's Vault - The Examples
HashiCorp's Vault - The ExamplesHashiCorp's Vault - The Examples
HashiCorp's Vault - The Examples
 
Hashicorp Vault ppt
Hashicorp Vault pptHashicorp Vault ppt
Hashicorp Vault ppt
 
Webauthn Tutorial
Webauthn TutorialWebauthn Tutorial
Webauthn Tutorial
 
What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)What is tackled in the Java EE Security API (Java EE 8)
What is tackled in the Java EE Security API (Java EE 8)
 
Jwt Security
Jwt SecurityJwt Security
Jwt Security
 
Advanced Sql Injection ENG
Advanced Sql Injection ENGAdvanced Sql Injection ENG
Advanced Sql Injection ENG
 
Introduction to Kong API Gateway
Introduction to Kong API GatewayIntroduction to Kong API Gateway
Introduction to Kong API Gateway
 
Secret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s VaultSecret Management with Hashicorp’s Vault
Secret Management with Hashicorp’s Vault
 
Docker Container Security
Docker Container SecurityDocker Container Security
Docker Container Security
 
Kubernetes Secrets Management on Production with Demo
Kubernetes Secrets Management on Production with DemoKubernetes Secrets Management on Production with Demo
Kubernetes Secrets Management on Production with Demo
 
Integrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and WilmaIntegrating Fiware Orion, Keyrock and Wilma
Integrating Fiware Orion, Keyrock and Wilma
 

Similar to State of the art authentication mit Java EE 8

STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
STATE OF THE ART AUTHENTICATION MIT JAVA EE 8STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
OPEN KNOWLEDGE GmbH
 
Java EE 8 security and JSON binding API
Java EE 8 security and JSON binding APIJava EE 8 security and JSON binding API
Java EE 8 security and JSON binding API
Alex Theedom
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Matt Raible
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Matt Raible
 
Java EE Security API - JSR375: Getting Started
Java EE Security API - JSR375: Getting Started Java EE Security API - JSR375: Getting Started
Java EE Security API - JSR375: Getting Started
Rudy De Busscher
 
Java ee 8 + security overview
Java ee 8 + security overviewJava ee 8 + security overview
Java ee 8 + security overview
Rudy De Busscher
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular js
Stormpath
 
JWT Authentication with AngularJS
JWT Authentication with AngularJSJWT Authentication with AngularJS
JWT Authentication with AngularJS
robertjd
 
From 0 to Spring Security 4.0
From 0 to Spring Security 4.0From 0 to Spring Security 4.0
From 0 to Spring Security 4.0
robwinch
 
TechDays 2013 Jari Kallonen: What's New WebForms 4.5
TechDays 2013 Jari Kallonen: What's New WebForms 4.5TechDays 2013 Jari Kallonen: What's New WebForms 4.5
TechDays 2013 Jari Kallonen: What's New WebForms 4.5Tieturi Oy
 
Building Secure User Interfaces With JWTs
Building Secure User Interfaces With JWTsBuilding Secure User Interfaces With JWTs
Building Secure User Interfaces With JWTs
robertjd
 
Java EE Application Security With PicketLink
Java EE Application Security With PicketLinkJava EE Application Security With PicketLink
Java EE Application Security With PicketLink
pigorcraveiro
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
Jini Lee
 
Spa Secure Coding Guide
Spa Secure Coding GuideSpa Secure Coding Guide
Spa Secure Coding Guide
Geoffrey Vandiest
 
WebLogic in Practice: SSL Configuration
WebLogic in Practice: SSL ConfigurationWebLogic in Practice: SSL Configuration
WebLogic in Practice: SSL Configuration
Simon Haslam
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015
Somkiat Khitwongwattana
 
Securing Web Applications with Token Authentication
Securing Web Applications with Token AuthenticationSecuring Web Applications with Token Authentication
Securing Web Applications with Token Authentication
Stormpath
 
RoadSec 2017 - Trilha AppSec - APIs Authorization
RoadSec 2017 - Trilha AppSec - APIs AuthorizationRoadSec 2017 - Trilha AppSec - APIs Authorization
RoadSec 2017 - Trilha AppSec - APIs Authorization
Erick Belluci Tedeschi
 
DataPower Restful API Security
DataPower Restful API SecurityDataPower Restful API Security
DataPower Restful API Security
Jagadish Vemugunta
 
Simple blog wall creation on Java
Simple blog wall creation on JavaSimple blog wall creation on Java
Simple blog wall creation on JavaMax Titov
 

Similar to State of the art authentication mit Java EE 8 (20)

STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
STATE OF THE ART AUTHENTICATION MIT JAVA EE 8STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
STATE OF THE ART AUTHENTICATION MIT JAVA EE 8
 
Java EE 8 security and JSON binding API
Java EE 8 security and JSON binding APIJava EE 8 security and JSON binding API
Java EE 8 security and JSON binding API
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
 
Java EE Security API - JSR375: Getting Started
Java EE Security API - JSR375: Getting Started Java EE Security API - JSR375: Getting Started
Java EE Security API - JSR375: Getting Started
 
Java ee 8 + security overview
Java ee 8 + security overviewJava ee 8 + security overview
Java ee 8 + security overview
 
How to Use Stormpath in angular js
How to Use Stormpath in angular jsHow to Use Stormpath in angular js
How to Use Stormpath in angular js
 
JWT Authentication with AngularJS
JWT Authentication with AngularJSJWT Authentication with AngularJS
JWT Authentication with AngularJS
 
From 0 to Spring Security 4.0
From 0 to Spring Security 4.0From 0 to Spring Security 4.0
From 0 to Spring Security 4.0
 
TechDays 2013 Jari Kallonen: What's New WebForms 4.5
TechDays 2013 Jari Kallonen: What's New WebForms 4.5TechDays 2013 Jari Kallonen: What's New WebForms 4.5
TechDays 2013 Jari Kallonen: What's New WebForms 4.5
 
Building Secure User Interfaces With JWTs
Building Secure User Interfaces With JWTsBuilding Secure User Interfaces With JWTs
Building Secure User Interfaces With JWTs
 
Java EE Application Security With PicketLink
Java EE Application Security With PicketLinkJava EE Application Security With PicketLink
Java EE Application Security With PicketLink
 
Javatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparisonJavatwo2012 java frameworkcomparison
Javatwo2012 java frameworkcomparison
 
Spa Secure Coding Guide
Spa Secure Coding GuideSpa Secure Coding Guide
Spa Secure Coding Guide
 
WebLogic in Practice: SSL Configuration
WebLogic in Practice: SSL ConfigurationWebLogic in Practice: SSL Configuration
WebLogic in Practice: SSL Configuration
 
Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015Smart Lock for Password @ Game DevFest Bangkok 2015
Smart Lock for Password @ Game DevFest Bangkok 2015
 
Securing Web Applications with Token Authentication
Securing Web Applications with Token AuthenticationSecuring Web Applications with Token Authentication
Securing Web Applications with Token Authentication
 
RoadSec 2017 - Trilha AppSec - APIs Authorization
RoadSec 2017 - Trilha AppSec - APIs AuthorizationRoadSec 2017 - Trilha AppSec - APIs Authorization
RoadSec 2017 - Trilha AppSec - APIs Authorization
 
DataPower Restful API Security
DataPower Restful API SecurityDataPower Restful API Security
DataPower Restful API Security
 
Simple blog wall creation on Java
Simple blog wall creation on JavaSimple blog wall creation on Java
Simple blog wall creation on Java
 

More from OPEN KNOWLEDGE GmbH

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
OPEN KNOWLEDGE GmbH
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
OPEN KNOWLEDGE GmbH
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
OPEN KNOWLEDGE GmbH
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
OPEN KNOWLEDGE GmbH
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
OPEN KNOWLEDGE GmbH
 
Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
OPEN KNOWLEDGE GmbH
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
OPEN KNOWLEDGE GmbH
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
OPEN KNOWLEDGE GmbH
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
OPEN KNOWLEDGE GmbH
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
OPEN KNOWLEDGE GmbH
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
OPEN KNOWLEDGE GmbH
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
OPEN KNOWLEDGE GmbH
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
OPEN KNOWLEDGE GmbH
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
OPEN KNOWLEDGE GmbH
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
OPEN KNOWLEDGE GmbH
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
OPEN KNOWLEDGE GmbH
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
OPEN KNOWLEDGE GmbH
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
OPEN KNOWLEDGE GmbH
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
OPEN KNOWLEDGE GmbH
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
OPEN KNOWLEDGE GmbH
 

More from OPEN KNOWLEDGE GmbH (20)

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
 

Recently uploaded

GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
vrstrong314
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Globus
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
abdulrafaychaudhry
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
ShamsuddeenMuhammadA
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
Globus
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
Adele Miller
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 

Recently uploaded (20)

GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Nidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, TipsNidhi Software Price. Fact , Costs, Tips
Nidhi Software Price. Fact , Costs, Tips
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...
 
Lecture 1 Introduction to games development
Lecture 1 Introduction to games developmentLecture 1 Introduction to games development
Lecture 1 Introduction to games development
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptxText-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
Text-Summarization-of-Breaking-News-Using-Fine-tuning-BART-Model.pptx
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
Enhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdfEnhancing Research Orchestration Capabilities at ORNL.pdf
Enhancing Research Orchestration Capabilities at ORNL.pdf
 
May Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdfMay Marketo Masterclass, London MUG May 22 2024.pdf
May Marketo Masterclass, London MUG May 22 2024.pdf
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 

State of the art authentication mit Java EE 8