【问题标题】:Bluemix - object storage - node.js - pkgcloud - openstack returns 401Bluemix - 对象存储 - node.js - pkgcloud - openstack 返回 401
【发布时间】:2015-12-22 12:09:18
【问题描述】:

我正在尝试将 pkgcloud (node.js) openstack 与 bluemix 对象存储一起使用,但是当我将所有请求的参数放在官方页面上时,它总是返回 401。我尝试使用 bluemix 上描述的 postman,它可以工作。

【问题讨论】:

    标签: node.js authorization ibm-cloud openstack pkgcloud


    【解决方案1】:

    我创建了一个package,它能够正确授权。它只是 pkgcloud 的一个副本,有一些修复。

    编辑:它正在工作! V2 支持被 bluemix 击退,现在只支持 V3,但我再次发现问题。

    记得使用最新版本(2.0.0)

    这就是你现在可以使用它的方式:

    var pkgcloud = require('pkgcloud-bluemix-objectstorage');
    
    // Create a config object
        var config = {};
    
    // Specify Openstack as the provider
        config.provider = "openstack";
    
    // Authentication url
        config.authUrl = 'https://identity.open.softlayer.com/';
        config.region= 'dallas';
    
    // Use the service catalog
        config.useServiceCatalog = true;
    
    // true for applications running inside Bluemix, otherwise false
        config.useInternal = false;
    
    // projectId as provided in your Service Credentials
        config.tenantId = 'xxx';
    
    // userId as provided in your Service Credentials
        config.userId = 'xxx';
    
    // username as provided in your Service Credentials
        config.username = 'xxx';
    
    // password as provided in your Service Credentials
        config.password = 'xxx';
    
    // This is part which is NOT in original pkgcloud. This is how it works with newest version of bluemix and pkgcloud at 22.12.2015. 
    //In reality, anything you put in this config.auth will be send in body to server, so if you need change anything to make it work, you can. PS : Yes, these are the same credentials as you put to config before. 
    //I do not fill this automatically to make it transparent.
    
    config.auth = {
        forceUri  : "https://identity.open.softlayer.com/v3/auth/tokens", //force uri to v3, usually you take the baseurl for authentication and add this to it /v3/auth/tokens (at least in bluemix)    
        interfaceName : "public", //use public for apps outside bluemix and internal for apps inside bluemix. There is also admin interface, I personally do not know, what it is for.
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "***", //userId
                    "password": "***" //userPassword
                }
            }
        },
        "scope": {
            "project": {
                "id": "***" //projectId
            }
        }
    };
    
        console.log("config: " + JSON.stringify(config));
    
    // Create a pkgcloud storage client
        var storageClient = pkgcloud.storage.createClient(config);
    
    // Authenticate to OpenStack
         storageClient.auth(function (error) {
            if (error) {
                console.error("storageClient.auth() : error creating storage client: ", error);
            }
            else {
                // Print the identity object which contains your Keystone token.
                console.log("storageClient.auth() : created storage client: " + JSON.stringify(storageClient._identity));
            }
    
        });
    

    PS:您应该能够在 bluemix 之外连接到此服务,因此您可以在本地主机上对其进行测试。


    以下几行是 1.2.3 版的旧内容,仅当您想使用在 2016 年 1 月之前使用 bluemix 的 v2 版本的 pkgcloud 时才阅读

    编辑: 看起来,bluemix 关闭了对 v2 openstack 的支持,只支持 v3,pkgcloud 根本不支持。所以这不再起作用(至少对我来说)。


    问题实际上是在 pkgcloud 和 bluemix 授权过程之间。 Bluemix 期待一些不同的授权。我创建了一个package,它能够正确地授权它。它只是 pkgcloud 的一个副本,有一些修复。

    这就是你可以使用它的方式:

    var pkgcloud = require('pkgcloud-bluemix-objectstorage');
    
    // Create a config object
        var config = {};
    
    // Specify Openstack as the provider
        config.provider = "openstack";
    
    // Authentication url
        config.authUrl = 'https://identity.open.softlayer.com/';
        config.region= 'dallas';
    
    // Use the service catalog
        config.useServiceCatalog = true;
    
    // true for applications running inside Bluemix, otherwise false
        config.useInternal = false;
    
    // projectId as provided in your Service Credentials
        config.tenantId = 'xxx';
    
    // userId as provided in your Service Credentials
        config.userId = 'xxx';
    
    // username as provided in your Service Credentials
        config.username = 'xxx';
    
    // password as provided in your Service Credentials
        config.password = 'xxx';
    
    // This is part which is NOT in original pkgcloud. This is how it works with newest version of bluemix and pkgcloud at 22.12.2015. 
    //In reality, anything you put in this config.auth will be send in body to server, so if you need change anything to make it work, you can. PS : Yes, these are the same credentials as you put to config before. 
    //I do not fill this automatically to make it transparent.
    
        config.auth = {
            tenantId: "xxx", //projectId
            passwordCredentials: {
                userId: "xxx", //userId
                password: "xxx" //password
            }
        };
    
        console.log("config: " + JSON.stringify(config));
    
    // Create a pkgcloud storage client
        var storageClient = pkgcloud.storage.createClient(config);
    
    // Authenticate to OpenStack
         storageClient.auth(function (error) {
            if (error) {
                console.error("storageClient.auth() : error creating storage client: ", error);
            }
            else {
                // Print the identity object which contains your Keystone token.
                console.log("storageClient.auth() : created storage client: " + JSON.stringify(storageClient._identity));
            }
    
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      相关资源
      最近更新 更多