blob: 1cc615067400c6596596a556df220043baeffd84 [file] [log] [blame]
margaretha139d0f72017-11-14 18:56:22 +01001package de.ids_mannheim.korap.authentication;
Michael Hanl87106d12015-09-14 18:13:51 +02002
3import com.nimbusds.jwt.SignedJWT;
4import de.ids_mannheim.korap.config.JWTSigner;
5import de.ids_mannheim.korap.config.KustvaktConfiguration;
margaretha0e8f4e72018-04-05 14:11:52 +02006import de.ids_mannheim.korap.constant.TokenType;
Michael Hanl87106d12015-09-14 18:13:51 +02007import de.ids_mannheim.korap.exceptions.KustvaktException;
8import de.ids_mannheim.korap.exceptions.StatusCodes;
9import de.ids_mannheim.korap.handlers.OAuthDb;
10import de.ids_mannheim.korap.interfaces.AuthenticationIface;
Michael Hanlf21773f2015-10-16 23:02:31 +020011import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
margaretha0e8f4e72018-04-05 14:11:52 +020012import de.ids_mannheim.korap.security.context.TokenContext;
Michael Hanl00b64e02016-05-24 20:24:27 +020013import de.ids_mannheim.korap.config.Attributes;
Michael Hanl87106d12015-09-14 18:13:51 +020014import de.ids_mannheim.korap.user.User;
Michael Hanl8abaf9e2016-05-23 16:46:35 +020015import de.ids_mannheim.korap.utils.NamingUtils;
Michael Hanlcb2d3f92016-06-02 17:34:06 +020016import de.ids_mannheim.korap.utils.StringUtils;
Michael Hanl87106d12015-09-14 18:13:51 +020017import net.sf.ehcache.CacheManager;
18import net.sf.ehcache.Element;
19import org.springframework.cache.annotation.CacheEvict;
20import org.springframework.cache.annotation.Cacheable;
21
22import java.text.ParseException;
23import java.util.Map;
24
25/**
26 * @author hanl
27 * @date 12/11/2014
28 */
29public class OpenIDconnectAuthentication implements AuthenticationIface {
30
31 private OAuthDb database;
32 private KustvaktConfiguration config;
33
Michael Hanl8abaf9e2016-05-23 16:46:35 +020034
35 public OpenIDconnectAuthentication (KustvaktConfiguration config,
36 PersistenceClient client) {
Michael Hanl87106d12015-09-14 18:13:51 +020037 this.database = new OAuthDb(client);
38 this.config = config;
39 }
40
Michael Hanl8abaf9e2016-05-23 16:46:35 +020041
Michael Hanl87106d12015-09-14 18:13:51 +020042 @Override
Michael Hanlc0ed00f2016-06-23 14:33:10 +020043 public TokenContext getTokenContext(String authToken)
Michael Hanl87106d12015-09-14 18:13:51 +020044 throws KustvaktException {
Michael Hanl87106d12015-09-14 18:13:51 +020045 return this.database.getContext(authToken);
46 }
47
Michael Hanl8abaf9e2016-05-23 16:46:35 +020048
Michael Hanl87106d12015-09-14 18:13:51 +020049 @Override
Michael Hanlc0ed00f2016-06-23 14:33:10 +020050 public TokenContext createTokenContext(User user, Map<String, Object> attr)
Michael Hanl87106d12015-09-14 18:13:51 +020051 throws KustvaktException {
Michael Hanl5fac8ab2016-01-29 16:33:04 +010052 String cl_secret = (String) attr.get(Attributes.CLIENT_SECRET);
Michael Hanle25dea22015-09-24 19:37:56 +020053 if (cl_secret == null)
54 throw new KustvaktException(StatusCodes.REQUEST_INVALID);
Michael Hanl19390652016-01-16 11:01:24 +010055 attr.remove(cl_secret);
Michael Hanle25dea22015-09-24 19:37:56 +020056 JWTSigner signer = new JWTSigner(cl_secret.getBytes(),
Michael Hanl87106d12015-09-14 18:13:51 +020057 config.getIssuer(), config.getTokenTTL());
Michael Hanle25dea22015-09-24 19:37:56 +020058 TokenContext c = new TokenContext();
59 c.setUsername(user.getUsername());
Michael Hanl87106d12015-09-14 18:13:51 +020060 SignedJWT jwt = signer.createJWT(user, attr);
61 try {
62 c.setExpirationTime(jwt.getJWTClaimsSet().getExpirationTimeClaim());
Michael Hanl8abaf9e2016-05-23 16:46:35 +020063 }
64 catch (ParseException e) {
Michael Hanl87106d12015-09-14 18:13:51 +020065 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
66 }
margaretha2afb97d2017-12-07 19:18:44 +010067 c.setTokenType(getTokenType());
Michael Hanl87106d12015-09-14 18:13:51 +020068 c.setToken(jwt.serialize());
69 CacheManager.getInstance().getCache("id_tokens")
70 .put(new Element(c.getToken(), c));
71 return c;
72 }
73
Michael Hanl8abaf9e2016-05-23 16:46:35 +020074
Michael Hanl87106d12015-09-14 18:13:51 +020075 @Override
Michael Hanl8abaf9e2016-05-23 16:46:35 +020076 public void removeUserSession (String token) throws KustvaktException {
Michael Hanl87106d12015-09-14 18:13:51 +020077 // emit token from cache only
78 }
79
Michael Hanl8abaf9e2016-05-23 16:46:35 +020080
Michael Hanl87106d12015-09-14 18:13:51 +020081 @Override
Michael Hanl8abaf9e2016-05-23 16:46:35 +020082 public TokenContext refresh (TokenContext context) throws KustvaktException {
Michael Hanl87106d12015-09-14 18:13:51 +020083 throw new UnsupportedOperationException("method not supported");
84 }
85
Michael Hanl8abaf9e2016-05-23 16:46:35 +020086
Michael Hanl87106d12015-09-14 18:13:51 +020087 @Override
margaretha2afb97d2017-12-07 19:18:44 +010088 public TokenType getTokenType() {
89 return TokenType.ID_TOKEN;
Michael Hanl87106d12015-09-14 18:13:51 +020090 }
91}