blob: ef9db774fb273a9d209d44c6565da67b48790bff [file] [log] [blame]
margaretha139d0f72017-11-14 18:56:22 +01001package de.ids_mannheim.korap.authentication;
Michael Hanl87106d12015-09-14 18:13:51 +02002
margaretha4de41192017-11-15 11:47:11 +01003import java.text.ParseException;
margaretha07a356a2018-07-11 19:12:21 +02004import java.time.ZoneId;
5import java.time.ZonedDateTime;
6import java.util.Date;
margaretha4de41192017-11-15 11:47:11 +01007import java.util.Map;
8
margaretha07a356a2018-07-11 19:12:21 +02009import org.apache.logging.log4j.LogManager;
10import org.apache.logging.log4j.Logger;
11
Michael Hanl87106d12015-09-14 18:13:51 +020012import com.nimbusds.jose.JOSEException;
13import com.nimbusds.jwt.SignedJWT;
margaretha4de41192017-11-15 11:47:11 +010014
margaretha07a356a2018-07-11 19:12:21 +020015import de.ids_mannheim.korap.config.Attributes;
margaretha5225ed02018-06-25 18:38:40 +020016import de.ids_mannheim.korap.config.FullConfiguration;
Michael Hanl87106d12015-09-14 18:13:51 +020017import de.ids_mannheim.korap.config.JWTSigner;
margaretha0e8f4e72018-04-05 14:11:52 +020018import de.ids_mannheim.korap.constant.TokenType;
Michael Hanl87106d12015-09-14 18:13:51 +020019import de.ids_mannheim.korap.exceptions.KustvaktException;
20import de.ids_mannheim.korap.exceptions.StatusCodes;
margaretha0e8f4e72018-04-05 14:11:52 +020021import de.ids_mannheim.korap.security.context.TokenContext;
Michael Hanl87106d12015-09-14 18:13:51 +020022import de.ids_mannheim.korap.user.User;
Michael Hanl87106d12015-09-14 18:13:51 +020023
margaretha07a356a2018-07-11 19:12:21 +020024/**
margaretha398f4722019-01-09 19:07:20 +010025 * Authentication provider using JWT tokens
margaretha4de41192017-11-15 11:47:11 +010026 *
Michael Hanl87106d12015-09-14 18:13:51 +020027 * Created by hanl on 5/23/14.
28 */
margarethabc3d3f72023-02-15 15:34:12 +010029@Deprecated
margarethadfecb4b2017-12-12 19:32:30 +010030public class APIAuthentication implements AuthenticationIface {
Michael Hanl87106d12015-09-14 18:13:51 +020031
margaretha07a356a2018-07-11 19:12:21 +020032 private static Logger jlog = LogManager.getLogger(APIAuthentication.class);
margarethadda4ef72018-12-06 14:20:51 +010033 public static boolean DEBUG = false;
34
Michael Hanl87106d12015-09-14 18:13:51 +020035 private JWTSigner signedToken;
36
margaretha5225ed02018-06-25 18:38:40 +020037 public APIAuthentication (FullConfiguration config) throws JOSEException {
Michael Hanl87106d12015-09-14 18:13:51 +020038 this.signedToken = new JWTSigner(config.getSharedSecret(),
39 config.getIssuer(), config.getTokenTTL());
40 }
margaretha07a356a2018-07-11 19:12:21 +020041
42 /**
43 * EM: for testing
44 *
margarethadfecb4b2017-12-12 19:32:30 +010045 * @param signedToken
46 */
47 public APIAuthentication (JWTSigner signedToken) {
48 this.signedToken = signedToken;
49 }
Michael Hanl87106d12015-09-14 18:13:51 +020050
Michael Hanl87106d12015-09-14 18:13:51 +020051 @Override
margaretha4de41192017-11-15 11:47:11 +010052 public TokenContext getTokenContext (String authToken)
Michael Hanl87106d12015-09-14 18:13:51 +020053 throws KustvaktException {
Michael Hanlf1e85e72016-01-21 16:55:45 +010054 TokenContext context;
margaretha07a356a2018-07-11 19:12:21 +020055 // Element ein = invalided.get(authToken);
margaretha4de41192017-11-15 11:47:11 +010056 try {
57 context = signedToken.getTokenContext(authToken);
margaretha2afb97d2017-12-07 19:18:44 +010058 context.setTokenType(getTokenType());
margaretha4de41192017-11-15 11:47:11 +010059 }
60 catch (JOSEException | ParseException ex) {
61 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
62 }
margaretha07a356a2018-07-11 19:12:21 +020063 // context = (TokenContext) e.getObjectValue();
64 // throw new KustvaktException(StatusCodes.EXPIRED);
Michael Hanlf1e85e72016-01-21 16:55:45 +010065 return context;
Michael Hanl87106d12015-09-14 18:13:51 +020066 }
67
Michael Hanl8abaf9e2016-05-23 16:46:35 +020068
Michael Hanl87106d12015-09-14 18:13:51 +020069 @Override
margaretha4de41192017-11-15 11:47:11 +010070 public TokenContext createTokenContext (User user, Map<String, Object> attr)
Michael Hanl87106d12015-09-14 18:13:51 +020071 throws KustvaktException {
Michael Hanle25dea22015-09-24 19:37:56 +020072 TokenContext c = new TokenContext();
73 c.setUsername(user.getUsername());
Michael Hanl87106d12015-09-14 18:13:51 +020074 SignedJWT jwt = signedToken.createJWT(user, attr);
75 try {
margaretha07a356a2018-07-11 19:12:21 +020076 c.setExpirationTime(
77 jwt.getJWTClaimsSet().getExpirationTime().getTime());
margarethadda4ef72018-12-06 14:20:51 +010078 if (DEBUG ) {
79 jlog.debug(jwt.getJWTClaimsSet()
80 .getClaim(Attributes.AUTHENTICATION_TIME));
81 }
margaretha07a356a2018-07-11 19:12:21 +020082 Date authTime = jwt.getJWTClaimsSet()
83 .getDateClaim(Attributes.AUTHENTICATION_TIME);
84 ZonedDateTime time = ZonedDateTime.ofInstant(authTime.toInstant(),
85 ZoneId.of(Attributes.DEFAULT_TIME_ZONE));
86 c.setAuthenticationTime(time);
Michael Hanl8abaf9e2016-05-23 16:46:35 +020087 }
88 catch (ParseException e) {
Michael Hanl87106d12015-09-14 18:13:51 +020089 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
90 }
margaretha2afb97d2017-12-07 19:18:44 +010091 c.setTokenType(getTokenType());
Michael Hanl87106d12015-09-14 18:13:51 +020092 c.setToken(jwt.serialize());
margaretha07a356a2018-07-11 19:12:21 +020093 // id_tokens.put(new Element(c.getToken(), c));
Michael Hanl87106d12015-09-14 18:13:51 +020094 return c;
95 }
96
Michael Hanl8abaf9e2016-05-23 16:46:35 +020097
margaretha2afb97d2017-12-07 19:18:44 +010098 @Override
99 public TokenType getTokenType () {
100 return TokenType.API;
101 }
Michael Hanl87106d12015-09-14 18:13:51 +0200102}