如何使用auth令牌对oracle cloud ipnetwork API进行身份验证?

时间:2017-07-27 14:07:09

标签: node.js oracle authentication token oracle-cloud-infrastructure

我无法使用auth令牌对oracle云进行身份验证。我正在使用" request"节点js中的节点模块使用其REST端点连接到oracle云。我在头部传递身份验证令牌,我得到的响应是" HTTP 401 Unauthorized"。不知道它为什么会发生。任何帮助都是赞赏。

1 个答案:

答案 0 :(得分:1)

以下是首先获取令牌然后将其用于后续请求的示例。

首先设置以下环境变量:

  • OC_REST_ENDPOINT
  • OC_IDENTITY_DOMAIN
  • OC_USER
  • OC_PASSWORD

例如:

export OC_REST_ENDPOINT=https://api-z999.compute.us0.oraclecloud.com/
export OC_IDENTITY_DOMAIN=myIdentityDomain
export OC_USER=some.user
export OC_PASSWORD=supersecretpassword

然后使用以下示例:

const request = require('request');
const restEndpoint = process.env.OC_REST_ENDPOINT;
const identityDomain = process.env.OC_IDENTITY_DOMAIN;
const user = process.env.OC_USER;
const password = process.env.OC_PASSWORD;

request(
  {
    method: 'POST',
    uri: restEndpoint + 'authenticate/',
    headers: {
      'content-type': 'application/oracle-compute-v3+json',
    },
    body: JSON.stringify({ // Must be a string, buffer or read stream
      user: '/Compute-' + identityDomain + '/' + user,
      password: password
    })
  },
  function(err, res, body) {
    if (err) {
      console.log(err);
      return;
    }

    if (res.statusCode !== 204) {
      console.log('Something broke.');
      return;
    }

    console.log('Got auth token');

    let token = res.headers['set-cookie'][0];

    request(
      {
        method: 'GET',
        uri: restEndpoint + 'instance/',
        headers: {
          'accept': 'application/oracle-compute-v3+directory+json',
          'cookie': token
        }
      },
      function(err, res, body) {
        if (err) {
          console.log(err);
          return;
        }

        console.log(body);
      }
    );

  }
);