Skip to content

Commit f699bfb

Browse files
committed
Updating auth filter
1 parent b4e5a3b commit f699bfb

File tree

2 files changed

+94
-74
lines changed

2 files changed

+94
-74
lines changed

server/src/main/java/org/diskproject/server/filters/KeycloakAuthenticationFilter.java

Lines changed: 76 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
import javax.ws.rs.container.PreMatching;
1010
import javax.ws.rs.core.Context;
1111
import javax.ws.rs.core.Response;
12+
import javax.ws.rs.core.UriInfo;
13+
1214
import java.net.MalformedURLException;
1315
import java.net.URL;
1416
import java.security.InvalidParameterException;
@@ -24,78 +26,90 @@
2426

2527
@PreMatching
2628
public class KeycloakAuthenticationFilter implements ContainerRequestFilter {
27-
@Context
28-
HttpServletRequest request;
29-
30-
@Override
31-
32-
public void filter(ContainerRequestContext requestContext) throws IOException {
33-
if (requestContext.getMethod().equals("GET") || requestContext.getMethod().equals("FETCH") ||
34-
requestContext.getMethod().equals("OPTIONS")) {
35-
} else {
36-
String token = requestContext.getHeaderString("Authorization");
37-
if (token == null || "".equals(token)) {
38-
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity("Access denied").build());
39-
} else {
40-
final JwtValidator validator = new JwtValidator();
41-
try {
42-
if (token.contains("Bearer")) {
43-
token = token.substring(7);
44-
}
45-
DecodedJWT jwtToken = validator.validate(token.replaceAll("Bearer ", ""));
46-
String email = jwtToken.getClaim("email").asString();
47-
requestContext.setProperty("username", email);
48-
} catch (InvalidParameterException e) {
49-
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).entity("Access denied").build());
50-
e.printStackTrace();
29+
@Context
30+
HttpServletRequest request;
31+
32+
@Override
33+
public void filter(ContainerRequestContext requestContext) throws IOException {
34+
// Only filter POSTS
35+
if (requestContext.getMethod().equals("GET") ||
36+
requestContext.getMethod().equals("FETCH") ||
37+
requestContext.getMethod().equals("OPTIONS")) {
38+
return;
5139
}
52-
}
53-
}
54-
}
5540

56-
public class JwtValidator {
57-
private final List<String> allowedIsses = Collections
58-
.singletonList("https://auth.mint.isi.edu/realms/production");
41+
// Special case for getData.
42+
UriInfo uriInfo = requestContext.getUriInfo();
43+
String path = uriInfo.getAbsolutePath().getPath();
44+
if (path.endsWith("getData"))
45+
return;
46+
47+
// All other request must have an authorization token.
48+
String token = requestContext.getHeaderString("Authorization");
49+
if (token != null && !token.equals("")) {
50+
final JwtValidator validator = new JwtValidator();
51+
try {
52+
// Remove the Bearer part
53+
if (token.startsWith("Bearer")) {
54+
token = token.substring(7);
55+
}
56+
DecodedJWT jwtToken = validator.validate(token);
57+
String email = jwtToken.getClaim("email").asString();
58+
requestContext.setProperty("username", email);
59+
return;
60+
} catch (InvalidParameterException e) {
61+
e.printStackTrace();
62+
}
63+
}
5964

60-
private String getKeycloakCertificateUrl(DecodedJWT token) {
61-
return token.getIssuer() + "/protocol/openid-connect/certs";
65+
requestContext.abortWith(
66+
Response.status(Response.Status.UNAUTHORIZED)
67+
.entity("Access denied").build());
6268
}
6369

64-
private RSAPublicKey loadPublicKey(DecodedJWT token) throws JwkException, MalformedURLException {
65-
66-
final String url = getKeycloakCertificateUrl(token);
67-
JwkProvider provider = new UrlJwkProvider(new URL(url));
70+
public class JwtValidator {
71+
private final List<String> allowedIsses = Collections
72+
.singletonList("https://auth.mint.isi.edu/realms/production");
6873

69-
return (RSAPublicKey) provider.get(token.getKeyId()).getPublicKey();
70-
}
71-
72-
/**
73-
* Validate a JWT token
74-
*
75-
* @param token
76-
* @return decoded token
77-
*/
78-
public DecodedJWT validate(String token) {
79-
try {
80-
final DecodedJWT jwt = JWT.decode(token);
81-
82-
if (!allowedIsses.contains(jwt.getIssuer())) {
83-
throw new InvalidParameterException(String.format("Unknown Issuer %s", jwt.getIssuer()));
74+
private String getKeycloakCertificateUrl(DecodedJWT token) {
75+
return token.getIssuer() + "/protocol/openid-connect/certs";
8476
}
8577

86-
RSAPublicKey publicKey = loadPublicKey(jwt);
78+
private RSAPublicKey loadPublicKey(DecodedJWT token) throws JwkException, MalformedURLException {
8779

88-
Algorithm algorithm = Algorithm.RSA256(publicKey, null);
89-
JWTVerifier verifier = JWT.require(algorithm)
90-
.withIssuer(jwt.getIssuer())
91-
.build();
80+
final String url = getKeycloakCertificateUrl(token);
81+
JwkProvider provider = new UrlJwkProvider(new URL(url));
9282

93-
verifier.verify(token);
94-
return jwt;
83+
return (RSAPublicKey) provider.get(token.getKeyId()).getPublicKey();
84+
}
9585

96-
} catch (Exception e) {
97-
throw new InvalidParameterException("JWT validation failed: " + e.getMessage());
98-
}
86+
/**
87+
* Validate a JWT token
88+
*
89+
* @param token
90+
* @return decoded token
91+
*/
92+
public DecodedJWT validate(String token) {
93+
try {
94+
final DecodedJWT jwt = JWT.decode(token);
95+
96+
if (!allowedIsses.contains(jwt.getIssuer())) {
97+
throw new InvalidParameterException(String.format("Unknown Issuer %s", jwt.getIssuer()));
98+
}
99+
100+
RSAPublicKey publicKey = loadPublicKey(jwt);
101+
102+
Algorithm algorithm = Algorithm.RSA256(publicKey, null);
103+
JWTVerifier verifier = JWT.require(algorithm)
104+
.withIssuer(jwt.getIssuer())
105+
.build();
106+
107+
verifier.verify(token);
108+
return jwt;
109+
110+
} catch (Exception e) {
111+
throw new InvalidParameterException("JWT validation failed: " + e.getMessage());
112+
}
113+
}
99114
}
100-
}
101115
}

server/src/main/java/org/diskproject/server/repository/DiskRepository.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,8 +1427,10 @@ private List<WorkflowBindings> getTLOIBindings(String username, List<WorkflowBin
14271427
sparqlVar = "_CSV_";
14281428
}
14291429

1430-
if (sparqlVar == null)
1430+
if (sparqlVar == null) {
1431+
tloiBinding.addBinding(vBinding);
14311432
continue;
1433+
}
14321434

14331435
// Get the data bindings for the sparql variable
14341436
List<String> dsUrls = dataVarBindings.get(sparqlVar);
@@ -1951,19 +1953,23 @@ private void processWorkflowOutputs (TriggeredLOI tloi, LineOfInquiry loi, Workf
19511953
}
19521954
}
19531955

1954-
System.out.println("OUT VARS: ");
1955-
System.out.println(outputAssignations);
1956-
19571956
// Now process generated outputs.
19581957
for (String outname : outputs.keySet()) {
1959-
for (String varName: outputAssignations.keySet()) {
1960-
String varBinding = outputAssignations.get(varName);
1961-
if (varBinding.contains("DO_NO_STORE") ||
1962-
varBinding.contains("DOWNLOAD_ONLY") ||
1963-
varBinding.contains("IMAGE") ||
1964-
varBinding.contains("VISUALIZE")) {
1958+
String varBinding = outputAssignations.get(outname);
1959+
//for (String varName: outputAssignations.keySet()) {
1960+
//String varBinding = outputAssignations.get(varName);
1961+
if (varBinding == null) {
1962+
System.out.println("[M] Variable binding not found for " + outname);
1963+
} else if (varBinding.contains("_DO_NO_STORE_") ||
1964+
varBinding.contains("_DOWNLOAD_ONLY_") ||
1965+
varBinding.contains("_IMAGE_") ||
1966+
varBinding.contains("_VISUALIZE_")) {
19651967
// DO NOTHING, some of these should be upload to MINIO
1966-
} else if (varBinding.contains("CONFIDENCE_VALUE")) {
1968+
} else if (varBinding.contains("_CONFIDENCE_VALUE_")) {
1969+
System.out.println("OUT: " + outname);
1970+
//System.out.println("var: " + varName);
1971+
System.out.println("bin: " + varBinding);
1972+
19671973
String dataid = outputs.get(outname).id;
19681974
FileAndMeta fm = methodAdapter.fetchData(dataid);
19691975
byte[] byteConf = fm.data;
@@ -1983,7 +1989,7 @@ private void processWorkflowOutputs (TriggeredLOI tloi, LineOfInquiry loi, Workf
19831989
} else {
19841990
System.out.println("Output information not found");
19851991
}
1986-
}
1992+
//}
19871993
}
19881994
}
19891995

0 commit comments

Comments
 (0)