blob: 341c4d0a1aaee6f2baaff72531d868ef55d4ff25 [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 Hanlf1e85e72016-01-21 16:55:45 +010023import net.sf.ehcache.Cache;
Michael Hanl87106d12015-09-14 18:13:51 +020024import net.sf.ehcache.CacheManager;
Michael Hanl87106d12015-09-14 18:13:51 +020025
margaretha07a356a2018-07-11 19:12:21 +020026/**
margaretha398f4722019-01-09 19:07:20 +010027 * Authentication provider using JWT tokens
margaretha4de41192017-11-15 11:47:11 +010028 *
Michael Hanl87106d12015-09-14 18:13:51 +020029 * Created by hanl on 5/23/14.
30 */
margarethabc3d3f72023-02-15 15:34:12 +010031@Deprecated
margarethadfecb4b2017-12-12 19:32:30 +010032public class APIAuthentication implements AuthenticationIface {
Michael Hanl87106d12015-09-14 18:13:51 +020033
margaretha07a356a2018-07-11 19:12:21 +020034 private static Logger jlog = LogManager.getLogger(APIAuthentication.class);
margarethadda4ef72018-12-06 14:20:51 +010035 public static boolean DEBUG = false;
36
Michael Hanl87106d12015-09-14 18:13:51 +020037 private JWTSigner signedToken;
38
margaretha5225ed02018-06-25 18:38:40 +020039 public APIAuthentication (FullConfiguration config) throws JOSEException {
Michael Hanl87106d12015-09-14 18:13:51 +020040 this.signedToken = new JWTSigner(config.getSharedSecret(),
41 config.getIssuer(), config.getTokenTTL());
42 }
margaretha07a356a2018-07-11 19:12:21 +020043
44 /**
45 * EM: for testing
46 *
margarethadfecb4b2017-12-12 19:32:30 +010047 * @param signedToken
48 */
49 public APIAuthentication (JWTSigner signedToken) {
50 this.signedToken = signedToken;
51 }
Michael Hanl87106d12015-09-14 18:13:51 +020052
Michael Hanl87106d12015-09-14 18:13:51 +020053 @Override
margaretha4de41192017-11-15 11:47:11 +010054 public TokenContext getTokenContext (String authToken)
Michael Hanl87106d12015-09-14 18:13:51 +020055 throws KustvaktException {
Michael Hanlf1e85e72016-01-21 16:55:45 +010056 TokenContext context;
margaretha07a356a2018-07-11 19:12:21 +020057 // Element ein = invalided.get(authToken);
margaretha4de41192017-11-15 11:47:11 +010058 try {
59 context = signedToken.getTokenContext(authToken);
margaretha2afb97d2017-12-07 19:18:44 +010060 context.setTokenType(getTokenType());
margaretha4de41192017-11-15 11:47:11 +010061 }
62 catch (JOSEException | ParseException ex) {
63 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
64 }
margaretha07a356a2018-07-11 19:12:21 +020065 // context = (TokenContext) e.getObjectValue();
66 // throw new KustvaktException(StatusCodes.EXPIRED);
Michael Hanlf1e85e72016-01-21 16:55:45 +010067 return context;
Michael Hanl87106d12015-09-14 18:13:51 +020068 }
69
Michael Hanl8abaf9e2016-05-23 16:46:35 +020070
Michael Hanl87106d12015-09-14 18:13:51 +020071 @Override
margaretha4de41192017-11-15 11:47:11 +010072 public TokenContext createTokenContext (User user, Map<String, Object> attr)
Michael Hanl87106d12015-09-14 18:13:51 +020073 throws KustvaktException {
Michael Hanle25dea22015-09-24 19:37:56 +020074 TokenContext c = new TokenContext();
75 c.setUsername(user.getUsername());
Michael Hanl87106d12015-09-14 18:13:51 +020076 SignedJWT jwt = signedToken.createJWT(user, attr);
77 try {
margaretha07a356a2018-07-11 19:12:21 +020078 c.setExpirationTime(
79 jwt.getJWTClaimsSet().getExpirationTime().getTime());
margarethadda4ef72018-12-06 14:20:51 +010080 if (DEBUG ) {
81 jlog.debug(jwt.getJWTClaimsSet()
82 .getClaim(Attributes.AUTHENTICATION_TIME));
83 }
margaretha07a356a2018-07-11 19:12:21 +020084 Date authTime = jwt.getJWTClaimsSet()
85 .getDateClaim(Attributes.AUTHENTICATION_TIME);
86 ZonedDateTime time = ZonedDateTime.ofInstant(authTime.toInstant(),
87 ZoneId.of(Attributes.DEFAULT_TIME_ZONE));
88 c.setAuthenticationTime(time);
Michael Hanl8abaf9e2016-05-23 16:46:35 +020089 }
90 catch (ParseException e) {
Michael Hanl87106d12015-09-14 18:13:51 +020091 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
92 }
margaretha2afb97d2017-12-07 19:18:44 +010093 c.setTokenType(getTokenType());
Michael Hanl87106d12015-09-14 18:13:51 +020094 c.setToken(jwt.serialize());
margaretha07a356a2018-07-11 19:12:21 +020095 // id_tokens.put(new Element(c.getToken(), c));
Michael Hanl87106d12015-09-14 18:13:51 +020096 return c;
97 }
98
Michael Hanl8abaf9e2016-05-23 16:46:35 +020099
margaretha2afb97d2017-12-07 19:18:44 +0100100 @Override
101 public TokenType getTokenType () {
102 return TokenType.API;
103 }
Michael Hanl87106d12015-09-14 18:13:51 +0200104}