openstacksdknet上的CloudIdentity(无法找到用户)

时间:2015-10-20 11:11:22

标签: c# .net cloud openstack

我正在使用OpenStack SDK .NET处理云备份客户端,我正在尝试使用从服务器管理员发送给我的用户凭据进行识别。对于测试,一切似乎在python openstack客户端上都很完美。我使用Advanced Rest Client Chrome Extension来获取令牌:

http://xx.xx.xx.xx:5000/v3/auth/tokens
POST METHOD

Header:
Content-Type: application/json

Body:

{
    "auth": {
        "identity": {
            "methods": [
                "password"
            ],
            "password": {
                "user": {
                    "id": "e5f4ec652c5e4d97b8fe6266113ac9f3",
                    "password": "PasswordFromAdministrator"
                }
            }
        },
        "scope": {
            "project": {
                "id": "9b594b7c51484702b6b4d1a91c6aa2ed"
            }
        }
    }
}

响应的状态为Created(201):

Date: Tue, 20 Oct 2015 10:28:26 GMT 
Server: Apache/2.4.7 (Ubuntu) 
X-Subject-Token: d3b8133fea7846abbe2f023f410e3294
Vary: X-Auth-Token 
x-openstack-request-id: req-a517ee76-9353-4c7c-b646-47f566c84838
Content-Length: 1756 
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json 

使用X-Subject-Token我使用python客户端使用以下命令登录openstack服务器:

openstack --os-url http://xx.xx.xx.xx:5000/v3 --os-identity-api-version 3 --os-token=d3b8133fea7846abbe2f023f410e3294

授权没问题。项目,用户,容器,一切都是完美的。 当我尝试使用OpenStack API for .NET时,问题出现了。我在所有表单中使用OpenStack SDK .NET和CloudIdentity Class(CloudIdentity,CloudIdentityWithProject),响应缓冲是“无法找到用户XXXX(禁用调试模式以禁止这些详细信息。”):

    static void Main(string[] args)
    {
        var username = "myuser";
        var password = "PasswordFromAdministrator";
        var project_name = "backup";
        var project_id = "9b594b7c51484702b6b4d1a91c6aa2ed";
        var auth_url = "http://xx.xx.xx.xx:5000/v3";
        var region = "RegionOne";

        var identity = new CloudIdentityWithProject()
        {
            Username = username,
            Password = password,
            ProjectId = new ProjectId(project_id),
            ProjectName = project_name
        };

        //var identity = new CloudIdentity()
        //{
            //Username = username,
            //Password = password,
        //};

        var identityProvider = new OpenStackIdentityProvider(new Uri(auth_url));

        var conn = new CloudFilesProvider(identity, identityProvider);

        // step-2
        var containers = conn.ListContainers();
        foreach (var container in containers)
        {
            Console.WriteLine(string.Format("Container Name: {1}", container.Name));
        }
    }

Exeption

用户存在于服务器中,并具有项目的管理角色。 所以问题是: 1.这是在openstack服务器中进行身份识别的正确方法吗? 2.如果没有,openstack中的备份文件是否有更好的API?

1 个答案:

答案 0 :(得分:1)

不幸的是,目前,OpenStack.NET仅支持OpenStack Identity v2.0,而不支持v3。也许您可以询问管理员是否有可供您使用的v2身份端点?

roadmap计划在OpenStack.NET v1.5.2中支持身份v3(我们目前在v1.5.0.1上)。但这不会发生几个月。