Как использовать vert.x AzureADAuth? - PullRequest
0 голосов
/ 02 января 2019

В нашей компании мы пытаемся начать использовать oauth2.0 с нашим клиентом Azure AD, используя vue.js в качестве служб frontend и vert.x на сервере.

Идея состоит в том, что я хочу

Если я вызову наш сервис vert.x с jwt, который мы получили из Azure AD, я получу исключение времени выполнения, говорящее: "Недостаточноили слишком много сегментов ".JWT имеет 3 сегмента, как и ожидалось.Вот как я создаю AzureADAuth:

    OAuth2ClientOptions opts = new OAuth2ClientOptions();
    opts.setFlow(OAuth2FlowType.AUTH_JWT);
    OAuth2Auth auth = AzureADAuth.create(vertx,"{{application-id}}","{{secret}}","{{tenant-id}}", opts);

Внутри моего обработчика я пытаюсь аутентифицироваться:

    HttpServerRequest request = context.request();
    String authorization = request.headers().get(HttpHeaders.AUTHORIZATION);

    String[] parts = authorization.split(" ");
    scheme = parts[0];
    token = parts[1];

    JsonObject creds = new JsonObject();
    creds.put("token_type", scheme);
    creds.put("access_token", token);

    authProvider.authenticate(creds,userAsyncResult -> {
      if(userAsyncResult.succeeded()){
          context.next();
      } else {
          context.fail(401);
      }
    });

Так что после того, как я понял, что мне нужно добавить jwk, я пытался использовать AzureADAuth.discover метод.

Мой код выглядит следующим образом:

    OAuth2ClientOptions optsDisc = new OAuth2ClientOptions();
    optsDisc.setSite("https://login.windows.net/{tenant-id}");
    optsDisc.setClientID("{application-id}");
    AzureADAuth.discover(vertx, optsDisc,res -> {
        if (res.succeeded()) {
            if(log.isDebugEnabled()) {
                log.debug("Discover succeeded.");
            }
        } else {
            log.error("Discover failed.");
        }
    });

Запуск этого кода вызывает «Обнаружение не удалось» со следующим сообщением:

java.lang.RuntimeException: java.security.cert.CertificateException: Невозможно проанализировать сертификат: java.io.IOException: Пустой ввод

Так что мой вопрос заключается в том, как мне аутентифицировать моего пользователя с моим данным носителемтокен с vert.x?

1 Ответ

0 голосов
/ 08 января 2019

У меня здесь явно был конфликт версий.Я установил все свои зависимости на 3.6.2, и теперь это работает.Просто потребовалось немного времени, чтобы понять, как обрабатывать обнаружение и что мне не нужно создавать новый объект OAuth2Auth с AzureAdAuth после обнаружения.

Для дальнейшего использования:

OAuth2ClientOptions optsDisc = new OAuth2ClientOptions();
opts.setClientID("{client-id}");
AzureADAuth.discover(vertx, opts,res -> {
if (res.succeeded()) {
//use res.result() to access the through discovery already created OAuth2Auth Object
log.debug("Discover succeeded.");
} else {
log.error("Discover failed.");
}
})
...