docs: @Produces
      Optional<JWTAuthContextInfo> getOptionalContextInfo() {
          // Log the config values
          log.debugf("init, publicKeyPemEnc=%s, issuedBy=%s, expGracePeriodSecs=%d, jwksRefreshInterval=%d",
                     publicKeyPemEnc.orElse("missing"), issuedBy, expGracePeriodSecs.get(), jwksRefreshInterval.get());
  
          /*
          FIXME Due to a bug in MP-Config (https://github.com/wildfly-extras/wildfly-microprofile-config/issues/43) we need to set all
          values to "NONE" as Optional Strings are populated with a ConfigProperty.defaultValue if they are absent. Fix this when MP-Config
          is repaired.
           */
          if (NONE.equals(publicKeyPemEnc.get()) && NONE.equals(jwksUri.get()) &&
                  NONE.equals(super.getMpJwtPublicKey().get()) && NONE.equals(super.getMpJwtLocation().get())) {
              return Optional.empty();
          }
          JWTAuthContextInfo contextInfo = new JWTAuthContextInfo();
          // Look to MP-JWT values first
          if (super.getMpJwtPublicKey().isPresent() && !NONE.equals(super.getMpJwtPublicKey().get())) {
              // Need to decode what this is...
              Optional<String> mpJwtublicKey = super.getMpJwtPublicKey();
              try {
                  RSAPublicKey pk = (RSAPublicKey) KeyUtils.decodeJWKSPublicKey(mpJwtublicKey.get());
                  contextInfo.setSignerKey(pk);
                  log.debugf("mpJwtPublicKey parsed as JWK(S)");
              } catch (Exception e) {
                  // Try as PEM key value
                  log.debugf("mpJwtPublicKey failed as JWK(S), %s", e.getMessage());
                  try {
                      RSAPublicKey pk = (RSAPublicKey) KeyUtils.decodePublicKey(mpJwtublicKey.get());
                      contextInfo.setSignerKey(pk);
                      log.debugf("mpJwtPublicKey parsed as PEM");
                  } catch (Exception e1) {
                      throw new DeploymentException(e1);
                  }
              }
          } else if (publicKeyPemEnc.isPresent() && !NONE.equals(publicKeyPemEnc.get())) {
              try {
                  RSAPublicKey pk = (RSAPublicKey) KeyUtils.decodePublicKey(publicKeyPemEnc.get());
                  contextInfo.setSignerKey(pk);
              } catch (Exception e) {
                  throw new DeploymentException(e);
              }
          }
  
          String mpJwtIssuer = super.getMpJwtIssuer();
          if (mpJwtIssuer != null && !mpJwtIssuer.equals(NONE)) {
              contextInfo.setIssuedBy(mpJwtIssuer);
          } else if (issuedBy != null && !issuedBy.equals(NONE)) {
              contextInfo.setIssuedBy(issuedBy);
          }
  
          Optional<Boolean> mpJwtRequireIss = super.getMpJwtRequireIss();
          if (mpJwtRequireIss != null && mpJwtRequireIss.isPresent()) {
              contextInfo.setRequireIssuer(mpJwtRequireIss.get());
          } else {
              // Default is to require iss claim
              contextInfo.setRequireIssuer(true);
          }
  
          if (expGracePeriodSecs.isPresent()) {
              contextInfo.setExpGracePeriodSecs(expGracePeriodSecs.get());
          }
          // The MP-JWT location can be a PEM, JWK or JWKS
          Optional<String> mpJwtLocation = super.getMpJwtLocation();
          if (mpJwtLocation.isPresent() && !NONE.equals(mpJwtLocation.get())) {
              contextInfo.setJwksUri(mpJwtLocation.get());
              contextInfo.setFollowMpJwt11Rules(true);
          } else if (jwksUri.isPresent() && !NONE.equals(jwksUri.get())) {
              contextInfo.setJwksUri(jwksUri.get());
          }
          if (jwksRefreshInterval.isPresent()) {
              contextInfo.setJwksRefreshInterval(jwksRefreshInterval.get());
          }
  
          return Optional.of(contextInfo);
      }