我的需要是从 Oracle ORDS 获得一个已通过身份验证的用户的令牌。我正在按照此文档使用fetch开发 javascript 。
我被困在这一点上
$ curl -i -k --user 3NvJRo_a0UwGKx7Q-kivtA..:F5WVwyrWxXj3ykmhSONldQ.. --data "grant_type=client_credentials" https://ol7-121.localdomain:8443/ords/pdb1/testuser1/oauth/token HTTP/1.1 200 OK 服务器:Apache-Coyote/1.1 X-Frame-Options:SAMEORIGIN 内容类型:application/json 传输编码:chunked 日期:2016 年 6 月 29 日星期三 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 commad 转换为 fetch 请求,但它以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 的标头。
之后考虑到我已经通过 Tomcat 部署了 ORDS,我修改了 /app/oracle/ora_rest/params 中的default.xml ,如本文档中所述。现在我能够检索错误的完整描述,并且我仍在尝试配置/检查日志。
错误的完整跟踪是:
61) at java.lang.Thread.run(Thread.java:745) Caused by: 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.HttpBasicAuthenticationHandler.extractCredentials (HttpBasicAuthenticationHandler.java:38) 在 oracle.dbtools.http.auth.HttpBasicAuthenticationHandler.(HttpBasicAuthenticationHandler.java:21) 在 oracle.dbtools.http.auth.HttpBasicAuthentication.(HttpBasicAuthentication.java:15) 在 oracle.dbtools.http。 auth.AuthenticationFilter.authenticate(AuthenticationFilter.java:69) 在 oracle.dbtools.http.auth.AuthenticationFilter.doFilter(AuthenticationFilter.java:62) 在 oracle.dbtools.http.filters.HttpFilter。