Github user janhoy commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/343#discussion_r241698617
  
    --- Diff: 
solr/core/src/test/org/apache/solr/security/JWTAuthPluginIntegrationTest.java 
---
    @@ -0,0 +1,214 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +package org.apache.solr.security;
    +
    +import java.io.BufferedReader;
    +import java.io.IOException;
    +import java.io.InputStream;
    +import java.io.InputStreamReader;
    +import java.io.OutputStream;
    +import java.net.HttpURLConnection;
    +import java.net.URL;
    +import java.nio.charset.StandardCharsets;
    +import java.util.concurrent.TimeoutException;
    +import java.util.concurrent.atomic.AtomicInteger;
    +import java.util.stream.Collectors;
    +
    +import org.apache.http.Header;
    +import org.apache.http.HttpException;
    +import org.apache.http.HttpHeaders;
    +import org.apache.http.HttpRequest;
    +import org.apache.http.HttpRequestInterceptor;
    +import org.apache.http.entity.ContentType;
    +import org.apache.http.protocol.HttpContext;
    +import org.apache.solr.client.solrj.impl.HttpClientUtil;
    +import org.apache.solr.cloud.SolrCloudAuthTestCase;
    +import org.apache.solr.common.util.Pair;
    +import org.jose4j.jwk.PublicJsonWebKey;
    +import org.jose4j.jwk.RsaJsonWebKey;
    +import org.jose4j.jws.AlgorithmIdentifiers;
    +import org.jose4j.jws.JsonWebSignature;
    +import org.jose4j.jwt.JwtClaims;
    +import org.junit.AfterClass;
    +import org.junit.Before;
    +import org.junit.BeforeClass;
    +import org.junit.Test;
    +
    +/**
    + * Validate that JWT token authentication works in a real cluster.
    + * TODO: Test also using SolrJ as client. But that requires a way to set 
Authorization header on request, see SOLR-13070
    + */
    +public class JWTAuthPluginIntegrationTest extends SolrCloudAuthTestCase {
    +  protected static final int NUM_SERVERS = 2;
    +  protected static final int NUM_SHARDS = 2;
    +  protected static final int REPLICATION_FACTOR = 1;
    +  private static final String COLLECTION = "jwtColl";
    +  private static String jwtTestToken;
    +  private static String baseUrl;
    +  private static AtomicInteger jwtInterceptCount = new AtomicInteger();
    +  private static AtomicInteger pkiInterceptCount = new AtomicInteger();
    +  private static final CountInterceptor interceptor = new 
CountInterceptor();
    +
    +  @BeforeClass
    +  public static void setupClass() throws Exception {
    +    configureCluster(NUM_SERVERS)// nodes
    +        
.withSecurityJson(TEST_PATH().resolve("security").resolve("jwt_plugin_jwk_security.json"))
    +        .addConfig("conf1", 
TEST_PATH().resolve("configsets").resolve("cloud-minimal").resolve("conf"))
    +        .configure();
    +    baseUrl = cluster.getRandomJetty(random()).getBaseUrl().toString();
    +
    +    String jwkJSON = "{\n" +
    +        "  \"kty\": \"RSA\",\n" +
    +        "  \"d\": 
\"i6pyv2z3o-MlYytWsOr3IE1olu2RXZBzjPRBNgWAP1TlLNaphHEvH5aHhe_CtBAastgFFMuP29CFhaL3_tGczkvWJkSveZQN2AHWHgRShKgoSVMspkhOt3Ghha4CvpnZ9BnQzVHnaBnHDTTTfVgXz7P1ZNBhQY4URG61DKIF-JSSClyh1xKuMoJX0lILXDYGGcjVTZL_hci4IXPPTpOJHV51-pxuO7WU5M9252UYoiYyCJ56ai8N49aKIMsqhdGuO4aWUwsGIW4oQpjtce5eEojCprYl-9rDhTwLAFoBtjy6LvkqlR2Ae5dKZYpStljBjK8PJrBvWZjXAEMDdQ8PuQ\",\n"
 +
    +        "  \"e\": \"AQAB\",\n" +
    +        "  \"use\": \"sig\",\n" +
    +        "  \"kid\": \"test\",\n" +
    +        "  \"alg\": \"RS256\",\n" +
    +        "  \"n\": 
\"jeyrvOaZrmKWjyNXt0myAc_pJ1hNt3aRupExJEx1ewPaL9J9HFgSCjMrYxCB1ETO1NDyZ3nSgjZis-jHHDqBxBjRdq_t1E2rkGFaYbxAyKt220Pwgme_SFTB9MXVrFQGkKyjmQeVmOmV6zM3KK8uMdKQJ4aoKmwBcF5Zg7EZdDcKOFgpgva1Jq-FlEsaJ2xrYDYo3KnGcOHIt9_0NQeLsqZbeWYLxYni7uROFncXYV5FhSJCeR4A_rrbwlaCydGxE0ToC_9HNYibUHlkJjqyUhAgORCbNS8JLCJH8NUi5sDdIawK9GTSyvsJXZ-QHqo4cMUuxWV5AJtaRGghuMUfqQ\"\n"
 +
    +        "}";
    +
    +    PublicJsonWebKey jwk = RsaJsonWebKey.Factory.newPublicJwk(jwkJSON);
    +    JwtClaims claims = JWTAuthPluginTest.generateClaims();
    +    JsonWebSignature jws = new JsonWebSignature();
    +    jws.setPayload(claims.toJson());
    +    jws.setKey(jwk.getPrivateKey());
    +    jws.setKeyIdHeaderValue(jwk.getKeyId());
    +    jws.setAlgorithmHeaderValue(AlgorithmIdentifiers.RSA_USING_SHA256);
    +
    +    jwtTestToken = jws.getCompactSerialization();
    +
    +    HttpClientUtil.removeRequestInterceptor(interceptor);
    +    HttpClientUtil.addRequestInterceptor(interceptor);
    +    
    +    cluster.waitForAllNodes(10);
    +  }
    +
    +  @AfterClass
    +  public static void tearDownClass() throws Exception {
    +    System.clearProperty("java.security.auth.login.config");
    --- End diff --
    
    Removed


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to