@Override public AccessToken refreshAndSaveAccessToken(Request request, AuthenticationContext context, AccessToken old) { AccessToken theNew = refresher.refreshAccessToken(old); saveAccessToken(request, context, theNew); return theNew; }
@Override public boolean isExpired() { return this.at.isExpired(); }
@Override public AccessToken loadAccessTokenByClientCredentials(String clientId, String clientSecret) { String key = clientId+":"+clientSecret; AccessToken token = getAccessToken(key); if(token == null){ token = fetcher.fetchTokenByClientCredentials(clientId,clientSecret); saveAccessToken(key,token); } if(token.isExpired()){ token = refreshAccessToken(token); saveAccessToken(key,token); } return token; }
protected AccessToken createAccessToken(Map<String, Object> map) { SimpleAccessToken details = new SimpleAccessToken((String)map.remove("access_token")); details.setRefreshToken((String)map.remove("refresh_token")); details.setClientId((String)map.remove("client_id")); details.setUserId((String)map.remove("user_id")); details.setCreated(System.currentTimeMillis()); details.setExpiresIn(((Integer)map.remove("expires_in"))); details.setScope((String)map.remove("scope")); return details; } }
@Override public AccessToken loadAccessTokenByPassword(String clientId, String clientSecret, String username, String password) { String key = username+":"+password+":"+clientId+":"+clientSecret; AccessToken token = getAccessToken(key); if(token == null){ token = fetcher.fetchTokenByPassword(clientId,clientSecret,username,password); saveAccessToken(key,token); } if(token.isExpired()){ token = refreshAccessToken(token); saveAccessToken(key,token); } return token; }
@Override public State handleAuthenticationResolved(Request request, Response response, AuthenticationContext context) throws Throwable { Authentication authc = context.getAuthentication(); if(null != authc) { AccessToken at; if(authc instanceof OAuth2LoginAuthentication) { at = ((OAuth2LoginAuthentication) authc).getAccessToken(); if(null != at) { accessTokenStore.saveAccessToken(request, context, at); } }else{ at = accessTokenStore.loadAccessToken(request, context); } if(null != at) { if(at.isExpired()) { log.info("AT '{}' expired, refresh it", at.getToken()); at = accessTokenStore.refreshAndSaveAccessToken(request, context, at); } TokenContext.setAccessToken(request, at); } } return State.CONTINUE; }
@Override public String getToken() { return this.at.getToken(); }
@Override public AccessToken refreshAccessToken(AccessToken old) { if(null == config.getTokenUrl()) { throw new IllegalStateException("The tokenUrl must be configured"); } HttpRequest request = httpClient.request(config.getTokenUrl()) .addFormParam("grant_type", "refresh_token") .addFormParam("refresh_token", old.getRefreshToken()) .setMethod(HTTP.Method.POST); return fetchAccessToken(request); }
@Override public String getRefreshToken() { return this.at.getRefreshToken(); }
@Override public AccessToken fetchTokenByClientCredentials(String clientId, String clientSecret) { if(null == config.getTokenUrl()) { throw new IllegalStateException("The tokenUrl must be configured"); } HttpRequest request = client.request(config.getTokenUrl()) .addFormParam("grant_type", "client_credentials"); return fetchAccessToken(request); }
@Override public Map<String, Object> getClaims() { return this.at.getClaims(); } }
@Override public AccessToken refreshAccessToken(AccessToken old) { AccessToken theNew = refresher.refreshAccessToken(old); return theNew; } }
@Override public String getClientId() { return this.at.getClientId(); }
@Override public String getUserId() { return this.at.getUserId(); }
@Override public String getScope() { return this.at.getScope(); }
protected void send(HttpRequest request, AccessToken at, Consumer<HttpResponse> consumer) { if (at != null) { request.addHeader(Headers.AUTHORIZATION, OAuth2Constants.BEARER + " " + at.getToken()); } if(this.preSendHandler!=null){ preSendHandler.accept(request); } HttpResponse response = request.send(); if (response.getStatus() == HTTP.SC_UNAUTHORIZED && at != null) { at = tokenFetcher.refreshAccessToken(at); request.addHeader(Headers.AUTHORIZATION, OAuth2Constants.BEARER + " " + at.getToken()); response = request.send(); } consumer.accept(response); if(this.postSendHandler!=null){ postSendHandler.accept(response); } }
public AccessToken refreshAccessToken(AccessToken old) { if(old instanceof MappedAccessToken) { tokenMappings.remove(((MappedAccessToken) old).getRawToken()); } if (null == config.getTokenUrl()) { throw new IllegalStateException("The tokenUrl must be configured"); } HttpRequest request = httpClient.request(config.getTokenUrl()).addFormParam("grant_type", "refresh_token") .addFormParam("refresh_token", old.getRefreshToken()).setMethod(HTTP.Method.POST); AccessToken newAt= fetchAccessToken(request); if(old instanceof MappedAccessToken){ MappedAccessToken mapped=new MappedAccessToken(((MappedAccessToken)old).getRawToken(), newAt); tokenMappings.put(mapped.getRawToken(), mapped); newAt=mapped; } return newAt; }
@Override public AccessToken fetchTokenByPassword(String clientId, String clientSecret, String username, String password) { if(null == config.getTokenUrl()) { throw new IllegalStateException("The tokenUrl must be configured"); } HttpRequest request = client.request(config.getTokenUrl()) .addFormParam("grant_type", "password") .addFormParam("username",username) .addFormParam("password",password); return fetchAccessToken(request); } }
protected Authentication authenticate(OAuth2Params params, IdToken idtoken, AccessToken at) { String clientId = idtoken.getClientId(); String userId = idtoken.getUserId(); UserPrincipal user = idtoken.getUserInfo(); ClientPrincipal client = idtoken.getClientInfo(); if(config.isForceLookupUserInfo() && null != at) { user = userInfoLookup.lookupUserInfo(at.getToken(), userId); } if(null != userDetailsLookup && !Strings.isEmpty(userId)) { user = userDetailsLookup.lookupUserDetails(at.getToken(), userId); } if(null == client && !Strings.isEmpty(clientId)) { client = new OAuth2Client(clientId, idtoken.getClaims()); } OAuth2LoginAuthentication authc = new OAuth2LoginAuthentication(user, idtoken); if(null != client) { authc.setClientPrincipal(client); } if(null != at) { authc.setAccessToken(at); } return authc; }