Merge branch 'DEVELOP' into SI-2183-Keycloak-Client-Rollen
diff --git a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/auth/JwtAuthenticationTokenFilter.java b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/auth/JwtAuthenticationTokenFilter.java
index 11db5b6..ff3cd1e 100644
--- a/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/auth/JwtAuthenticationTokenFilter.java
+++ b/gfsBackendService/src/main/java/org/eclipse/openk/gridfailureinformation/config/auth/JwtAuthenticationTokenFilter.java
@@ -16,10 +16,12 @@
 package org.eclipse.openk.gridfailureinformation.config.auth;
 
 import org.eclipse.openk.gridfailureinformation.exceptions.UnauthorizedException;
+import org.keycloak.KeycloakPrincipal;
 import org.keycloak.RSATokenVerifier;
 import org.keycloak.representations.AccessToken;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.core.Authentication;
 import org.springframework.security.core.AuthenticationException;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -28,6 +30,7 @@
 import org.springframework.stereotype.Component;
 import org.springframework.web.filter.OncePerRequestFilter;
 
+import javax.security.auth.Subject;
 import javax.servlet.FilterChain;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
@@ -36,6 +39,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
 
 @Component
 public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@@ -74,11 +78,17 @@
 
     private void createToken(SecurityContext context, String bearerTkn) throws ServletException {
         try {
+
+            List<String> allRoles = new ArrayList<>();
             AccessToken token = RSATokenVerifier.create(bearerTkn).getToken();
+            //Clientroles
+            token.getResourceAccess().forEach((client, access) -> allRoles.addAll(access.getRoles()));
+
+            //Realmroles
+            allRoles.addAll(token.getRealmAccess().getRoles());
 
             List<GrantedAuthority> authorities= new ArrayList<>();
-            token.getRealmAccess().getRoles().stream()
-                    .forEach( x -> authorities.add(new SimpleGrantedAuthority("ROLE_"+x.toUpperCase())));
+            allRoles.forEach( x -> authorities.add(new SimpleGrantedAuthority("ROLE_"+x.toUpperCase())));
 
             UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(token.getPreferredUsername(), null, authorities);
             auth.setDetails(bearerTkn);