为啥我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误?

Posted

技术标签:

【中文标题】为啥我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误?【英文标题】:Why am I getting this error in Oauth 2 access token code using PL/SQL?为什么我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误? 【发布时间】:2020-10-02 16:35:38 【问题描述】:

我可以使用邮递员获取访问令牌,但无法使用 PL/SQL 块。即使我使用相同的客户端 ID 和客户端密码,我也会收到未经授权的回复。请让我知道我做错了什么。我正在研究 oracle 12c。谢谢。

DECLARE

  http_req     UTL_HTTP.REQ;
  http_resp    UTL_HTTP.RESP;
  l_ClientID varchar2(1000) := 'clientid';
  l_ClientSecret varchar2(1000) := 'clientsecret';
  l_AuthResponse UTL_HTTP.RESP;
  l_AuthRaw VARCHAR2 (32767);
  l_AuthReqBody varchar2(2000);
  v_url varchar2(2000) := 'http://someurl/oauth/token';
  l_ClientCredetial VARCHAR2(1000) := l_ClientID || ':' || l_ClientSecret;

BEGIN

   l_AuthReqBody := 'grant_type=client_credentials'|| chr(38) || 'client_id=' || l_ClientID || chr(38) || 'client_secret=' || l_ClientSecret;

   -- Set Oracle Wallet, which works fine

   http_req := utl_http.begin_request(
                   v_url ,
                   'POST',
                   'HTTP/1.1');

  utl_http.set_header (http_req, 'Content-Type','application/x-www-form-urlencoded');

   utl_http.write_text (http_req, l_AuthReqBody);

   l_AuthResponse := utl_http.get_response(http_req);

   utl_http.read_text(l_AuthResponse, l_AuthRaw);
   sp_memo_temp('1 l_AuthRaw: '||l_AuthRaw);

  UTL_HTTP.end_response (l_AuthResponse);
  UTL_HTTP.end_request (http_req);
END;

【问题讨论】:

【参考方案1】:

我只需要使用 OAuth 访问 REST Web 服务,并且只需要使用我的令牌 utl_http.set_header(l_http_request, 'Authorization', l_token) 设置一个标头。

【讨论】:

以上是关于为啥我在使用 PL/SQL 的 Oauth 2 访问令牌代码中出现此错误?的主要内容,如果未能解决你的问题,请参考以下文章

我在安装配置完Oracle和PL/SQL后,为啥plsql的database一栏没有可选项?

为啥这个 PL/SQL 不起作用?

为啥 ActiveRecord SQL 和 PL/SQL Developer SQL 之间存在差异?

为啥我的 PL/SQL 触发器会引发“错误(2,2):PL/SQL:语句被忽略”和“错误(2,5):PLS-00204:函数或伪列'EXISTS'”错误?

为啥这个 PL/SQL 查询不使用 ODP.NET 执行

为啥 PL/SQL 会失败