1

我的需要是从 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。

4

1 回答 1

1

线

[...]引起:java.lang.IllegalArgumentException:字符串长度必须是四的倍数。在 oracle.dbtools.common.util.Base64.base64ToByteArray(Base64.java:43) [...]

引导我修改传递client_id:client_secret (authdata) base64 convert (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 请求。

于 2018-11-28T15:46:45.200 回答