Oracle ORDS OAuth2, 500 с ошибкой "Длина строки должна быть кратна четырем" из oracle.dbtools.common.util.Base64.base64ToByteArray
Мне нужно получить токен от Oracle ORDS с уже авторизованным пользователем. Я следую этой документации, чтобы разработать JavaScript с использованием fetch.
Я застрял в точке
$ curl -i -k --user 3NvJRo_a0UwGKx7Q-kivtA..: F5WVwyrWxXj3ykmhSONldQ.. --data "grant_type = client_credentials" https://ol7-121.localdomain:8443/ords/pdb1/testuser1/oauth/token 200 OK Сервер: Apache-Coyote/1.1 X-Frame-Options: SAMEORIGIN Тип содержимого: application/json Передача-кодировка: chunked Дата: среда, 29 июня 2016 12:07:02 GMT
{"access_token": "- zYl-sFyB2iLicAHw2TsRA..", "token_type": "bearer", "expires_in": 3600} $
Основываясь на этом примере, я установил свой curl, как показано ниже, и проверил его в командной строке моего хоста, и он ответил верным токеном, как и ожидалось
curl -i -k --user Uj1xXqz5pNRoSubJ6v3Hdg..:Npvid_qzM75NrO978NKl0A.. --data "grant_type=client_credentials" http://myhost:8080/ords/myrest/oauth/token
Затем я пытаюсь преобразовать проверенную запятую curl как запрос на выборку таким образом, но он отвечает с 500 Internal Server Error:
fetch('http://myhost:8080/ords/myrest/oauth/token',
{
method: 'POST',
headers: {
'Authorization': 'Basic Uj1xXqz5pNRoSubJ6v3Hdg..:Npvid_qzM75NrO978NKl0A..'
},
body: 'grant_type=client_credentials'
})...
Я не могу понять, что я делаю неправильно или чего мне не хватает, хотя я ищу и пробую разные варианты. Советы и предложения будут оценены.
************ РЕДАКТИРОВАТЬ: Следуя советам в комментариях, я пытаюсь сделать несколько шагов дальше ************
О запросе OPTIONS я проверил сетевую активность (в качестве первой попытки я использую инструменты разработчика браузера) и нашел заголовки с методом OPTIONS и кодом состояния 200.
После этого, учитывая, что я развернул ORDS через Tomcat, я изменяю файл default.xml в /app/oracle/ora_rest/params, как указано в этой документации. Теперь я могу получить полное описание ошибки, и я все еще пытаюсь настроить / проверить журналы.
Полный след ошибки:
InternalServerException [statusCode = 500, reason =[Произошла непредвиденная ошибка со следующим сообщением: длина строки должна быть кратна четырем.]] В oracle.dbtools.http.errors.ServletResponseExceptionMapper.mapError(ServletResponseExceptionMapper.java:84) oracle.dbtools.http.errors.ErrorPageRenderer.(ErrorPageRenderer.java:43) в oracle.dbtools.http.errors.ErrorPageRenderer.(ErrorPageRenderer.java:35) в oracle.dbtools.http.errors.ilttFF.terf:119) в oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47) в oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64) в oracle.dbtools.ht.ForceAuthFilter.doFilter(ForceAuthFilter.java:44) в oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47) в oracle.dbtools.http.filters.FilterChainImpl.doFilter) Filter.dbtools.http.filters.Filters.filter(Filters.java:47) в oracle.dbtools.http.entrypoint.EntryPoint.service(EntryPoi) nt.java:82) в oracle.dbtools.http.entrypoint.EntryPointServlet.service(EntryPointServlet.java:49) в javax.servlet.http.HttpServlet.service(HttpServlet.java:742) в oracle.dbtools.r.HttpEndpointBase.dispatchableServices(HttpEndpointBase.java:116) в oracle.dbtools.rt.web.HttpEndpointBase.service(HttpEndpointBase.java:81) в javax.servlet.http.HttpServp: atvlet. apache.catalina.core. WsFilter.java:53) по адресу org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) по адресу org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.cat.ina..core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) в org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) в org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475) в org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.javag: at40).valves.ErrorReportValve.invoke(ErrorReportValve.java:80) в org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) в org.apache.catalina.core.StandardEngineValv) в org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341) в org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:495) в org.apache.coyote.AbstractProcessor AbstractProcessorLight.java:66) в org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:767) в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1354) в org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) в java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) в org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.jun(Task) at java.lang.Thread.run(Thread.java:745) Причина: java.lang.IllegalArgumentException: длина строки должна быть кратна четырем. в oracle.dbtools.common.util.Base64.base64ToByteArray(Base64.java:43) в oracle.dbtools.common.util.Base64.base64ToByteArray(Base64.java:23) в oracle.dbtools.http.auth.HttBracticAutheut (HttpBasicAuthenticationHandler.java:38) в oracle.dbtools.http.auth.HttpBasicAuthenticationHandler.(HttpBasicAuthenticationHandler.java:21) в oracle.dbtools.http.auth.Http.auth.AuthenticationFilter.authenticate(AuthenticationFilter.java:69) в oracle.dbtools.http.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:62) в oracle.dbtools.http.filters.HttpFilter.ttpilter (HtpFilter.jtFilter (Ht). в oracle.dbtools.http.filters.FilterChainImpl.doFilter(FilterChainImpl.java:64) в oracle.dbtools.url.mapping.RequestMapperImpl.doFilter(RequestMapperImpl.java:125) в oracleurldopping.p. (URLMappingBase.java:103) в oracle.dbtools.url.mapping.filter.URLMappingFilter.doFilter(URLMappingFilter.java:124) в oracle.dbtools.http.filters.HttpFilter.doFilter(HttpFilter.java:47) в oracle.dbtools.http.filters.FilterChainImpl.doFilter (FilterChainImptoj) atj.jpg.http.cors.CORSResponseFilter.:64) at oracle.dbtools.http.errors.ErrorPageFilter.doFilter(ErrorPageFilter.java:94) ... еще 34
1 ответ
Линия
[...] Причина: java.lang.IllegalArgumentException: длина строки должна быть кратна четырем. в oracle.dbtools.common.util.Base64.base64ToByteArray(Base64.java:43) [...]
привести меня к изменению заголовков запросов, передавая client_id:client_secret (authdata) base64, преобразованный (window.btoa (authdata)), следующим образом:
fetch('http://myhost:8080/ords/myrest/oauth/token',
{
method: 'POST',
headers: {
'Authorization': 'Basic ' + window.btoa(authdata),
'Content-Type': 'application/x-www-form-urlencoded'
},
body: 'grant_type=client_credentials'
})...
Выборка теперь правильно отвечает значением access_token, и я могу использовать его для выполнения авторизованных запросов GET.