SparkJava: как проверить токен OAuth в моем фильтре before()?

У меня есть очень простой веб-сервер, написанный на Spark-java (не Apache Spark), и я хотел бы получить токен аутентификации из первоначального запроса и отправить его на вторичный URL-адрес для аутентификации в базе данных аутентификации моей компании. Я просмотрел документацию и не знаю, как это сделать. Мне также нужно знать, как установить параметр запроса для запроса к серверу авторизации. Ниже мой код:

/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package c2c_server;

import static spark.Spark.*;

public class HelloWorld {
   public static void main(String[] args) {

      before((before_req, before_res) -> {
         System.out.println("I'm in before");
         String token = before_req.headers("Authorization");

         // No token, reject
         if (token == null) {
            halt(401, "Unauthorized");
         }
         else if (token != null) {
            System.out.println("Token is : " + token);
            String url = "https://my-auth-url";

         }
      });

      get("/command/:command", (req, res) -> {
         System.out.println("You sent the command: " + req.params(":command") + " and the headers: " + req.headers());
         if (req.params(":command").equals("run")) {
            res.status(200);
            return "You'll run the Java app to push data to S3!";
         }
         else {
            res.status(400);
            return "I don't understand that command";
         }
      });
      System.out.println("Server listening");
   }
}

person BPS    schedule 11.02.2020    source источник


Ответы (1)


Судя по некоторым исследованиям, у проекта JavaSpark нет способа сделать это самостоятельно. Мне нужно было использовать библиотеку Apache HttpClient, чтобы придумать этот фрагмент кода для обработки второго запроса на аутентификацию токена:

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.util.EntityUtils;
import org.apache.http.impl.client.HttpClients;

    private static boolean IsAuthenticated(final String environment, final String token) throws Exception {
          String url = "";
          if (environment.equalsIgnoreCase("DEV")) {
             url = "https://dev-oauth2-internal.com/validate/AppIdClaimsTrust";
          }
          else if (environment.equalsIgnoreCase("QA")) {
             url = "https://qa-oauth2-internal.com/validate/AppIdClaimsTrust";
          }
          else if (environment.equalsIgnoreCase("PROD")) {
             url = "https://oauth2-internal.com/validate/AppIdClaimsTrust";
          }
          else {
             throw new Exception("Environment not supported");
          }
          HttpGet request = new HttpGet(url + "?token=" + token);
          try (CloseableHttpResponse response = httpClient.execute(request)) {
             int statusCode = response.getStatusLine().getStatusCode();
             return (statusCode == 200);
          }
person BPS    schedule 12.02.2020