use of io.jans.ca.server.service.Rp in project jans by JanssenProject.
the class CheckIdTokenOperation method execute.
@Override
public IOpResponse execute(CheckIdTokenParams params) {
try {
OpenIdConfigurationResponse discoveryResponse = getDiscoveryService().getConnectDiscoveryResponseByRpId(params.getRpId());
final Rp rp = getRp();
final String idToken = params.getIdToken();
final Jwt jwt = Jwt.parse(idToken);
final Validator validator = new Validator.Builder().discoveryResponse(discoveryResponse).idToken(jwt).keyService(getKeyService()).opClientFactory(getOpClientFactory()).rpServerConfiguration(getConfigurationService().getConfiguration()).rp(rp).build();
// validate at_hash in id_token
validator.validateAccessToken(params.getAccessToken(), atHashCheckRequired(rp.getResponseTypes()));
// validate c_hash in id_token
validator.validateAuthorizationCode(params.getCode());
// validate s_hash in id_token
validator.validateState(params.getState());
final CheckIdTokenResponse opResponse = new CheckIdTokenResponse();
opResponse.setActive(validator.isIdTokenValid(params.getNonce()));
opResponse.setIssuedAt(Utils.date(jwt.getClaims().getClaimAsDate(JwtClaimName.ISSUED_AT)));
opResponse.setExpiresAt(Utils.date(jwt.getClaims().getClaimAsDate(JwtClaimName.EXPIRATION_TIME)));
opResponse.setClaims(jwt.getClaims().toMap());
return opResponse;
} catch (HttpException e) {
throw e;
} catch (Exception e) {
LOG.error(e.getMessage(), e);
}
throw HttpException.internalError();
}
use of io.jans.ca.server.service.Rp in project jans by JanssenProject.
the class RegisterSiteOperation method createRp.
private Rp createRp(RegisterRequest registerRequest) {
final Rp rp = new Rp();
RegisterRequestMapper.fillRp(rp, registerRequest);
return rp;
}
use of io.jans.ca.server.service.Rp in project jans by JanssenProject.
the class RpGetGetClaimsGatheringUrlOperation method execute.
@Override
public IOpResponse execute(RpGetClaimsGatheringUrlParams params) throws Exception {
validate(params);
final UmaMetadata metadata = getDiscoveryService().getUmaDiscoveryByRpId(params.getRpId());
final Rp rp = getRp();
final String state = StringUtils.isNotBlank(params.getState()) ? getStateService().putState(getStateService().encodeExpiredObject(params.getState(), ExpiredObjectType.STATE)) : getStateService().generateState();
String url = metadata.getClaimsInteractionEndpoint() + "?client_id=" + rp.getClientId() + "&ticket=" + params.getTicket() + "&claims_redirect_uri=" + params.getClaimsRedirectUri() + "&state=" + state;
if (params.getCustomParameters() != null && !params.getCustomParameters().isEmpty()) {
List<String> paramsList = Lists.newArrayList("rp_id", "client_id", "ticket", "state", "claims_redirect_uri");
Map<String, String> customParameterMap = params.getCustomParameters().entrySet().stream().filter(map -> !paramsList.contains(map.getKey())).collect(Collectors.toMap(map -> map.getKey(), map -> map.getValue()));
if (!customParameterMap.isEmpty()) {
url += "&" + Utils.mapAsStringWithEncodedValues(customParameterMap);
}
}
final RpGetClaimsGatheringUrlResponse r = new RpGetClaimsGatheringUrlResponse();
r.setUrl(url);
r.setState(state);
return r;
}
use of io.jans.ca.server.service.Rp in project jans by JanssenProject.
the class RsCheckAccessOperation method execute.
@Override
public IOpResponse execute(final RsCheckAccessParams params) throws Exception {
validate(params);
Rp rp = getRp();
UmaResource resource = rp.umaResource(params.getPath(), params.getHttpMethod());
if (resource == null) {
final ErrorResponse error = new ErrorResponse("invalid_request");
error.setErrorDescription("Resource is not protected with path: " + params.getPath() + " and httpMethod: " + params.getHttpMethod() + ". Please protect your resource first with uma_rs_protect command. Check details on " + CoreUtils.DOC_URL);
LOG.error(error.getErrorDescription());
throw new WebApplicationException(Response.status(Response.Status.BAD_REQUEST).type(MediaType.APPLICATION_JSON_TYPE).entity(Jackson2.asJson(error)).build());
}
PatProvider patProvider = new PatProvider() {
@Override
public String getPatToken() {
return getUmaTokenService().getPat(params.getRpId()).getToken();
}
@Override
public void clearPat() {
// do nothing
}
};
List<String> requiredScopes = getRequiredScopes(params, resource);
CorrectRptIntrospectionResponse status = getIntrospectionService().introspectRpt(params.getRpId(), params.getRpt());
LOG.trace("RPT: " + params.getRpt() + ", status: " + status);
if (!Strings.isNullOrEmpty(params.getRpt()) && status != null && status.getActive() && status.getPermissions() != null) {
for (CorrectUmaPermission permission : status.getPermissions()) {
boolean containsAny = !Collections.disjoint(requiredScopes, permission.getScopes());
LOG.trace("containsAny: " + containsAny + ", requiredScopes: " + requiredScopes + ", permissionScopes: " + permission.getScopes());
if (containsAny) {
if ((permission.getResourceId() != null && permission.getResourceId().equals(resource.getId()))) {
// normal UMA
LOG.debug("RPT has enough permissions, access GRANTED. Path: " + params.getPath() + ", httpMethod:" + params.getHttpMethod() + ", site: " + rp);
return new RsCheckAccessResponse("granted");
}
}
}
}
if (CollectionUtils.isEmpty(params.getScopes()) && !CollectionUtils.isEmpty(resource.getTicketScopes())) {
requiredScopes = resource.getTicketScopes();
}
final RptPreProcessInterceptor rptInterceptor = getOpClientFactory().createRptPreProcessInterceptor(new ResourceRegistrar(patProvider, new ServiceProvider(rp.getOpHost())));
Response response = null;
try {
LOG.trace("Try to register ticket, scopes: " + requiredScopes + ", resourceId: " + resource.getId());
response = rptInterceptor.registerTicketResponse(requiredScopes, resource.getId());
} catch (ClientErrorException e) {
LOG.debug("Failed to register ticket. Entity: " + e.getResponse().readEntity(String.class) + ", status: " + e.getResponse().getStatus(), e);
if (e.getResponse().getStatus() == 400 || e.getResponse().getStatus() == 401) {
LOG.debug("Try maybe PAT is lost on AS, force refresh PAT and request ticket again ...");
// force to refresh PAT
getUmaTokenService().obtainPat(params.getRpId());
response = rptInterceptor.registerTicketResponse(requiredScopes, resource.getId());
} else {
throw e;
}
} catch (Exception e) {
LOG.error(e.getMessage(), e);
throw e;
}
RsCheckAccessResponse opResponse = new RsCheckAccessResponse("denied");
opResponse.setWwwAuthenticateHeader((String) response.getMetadata().getFirst("WWW-Authenticate"));
opResponse.setTicket(((PermissionTicket) response.getEntity()).getTicket());
LOG.debug("Access denied for path: " + params.getPath() + " and httpMethod: " + params.getHttpMethod() + ". Ticket is registered: " + opResponse);
return opResponse;
}
use of io.jans.ca.server.service.Rp in project jans by JanssenProject.
the class JansPersistenceService method getRps.
public Set<Rp> getRps() {
try {
List<RpObject> rpObjects = this.persistenceEntryManager.findEntries(String.format("%s,%s", new Object[] { getRpOu(), getClientApiDn() }), RpObject.class, null);
Set<Rp> result = new HashSet();
for (RpObject ele : rpObjects) {
Rp rp = MigrationService.parseRp(ele.getData());
if (rp != null) {
result.add(rp);
} else {
LOG.error("Failed to parse rp, id: {}, dn: {} ", ele.getId(), ele.getDn());
}
}
return result;
} catch (Exception e) {
if (((e instanceof EntryPersistenceException)) && (e.getMessage().contains("Failed to find entries"))) {
LOG.warn("Failed to fetch RpObjects. {} ", e.getMessage());
return null;
}
LOG.error("Failed to fetch rps. Error: {} ", e.getMessage(), e);
}
return null;
}
Aggregations