В нашей компании мы пытаемся начать использовать 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?