C# Openstack.Net SDK无法访问服务

C# Openstack.Net SDK无法访问服务,c#,openstack,rackspace-cloud,keystone,openstacknetsdk,C#,Openstack,Rackspace Cloud,Keystone,Openstacknetsdk,我们在自己的硬件上安装了一个OpenStack系统,安装了所有组件,通过web界面创建了网络和虚拟机,一切看起来都很好 我正在尝试使用openstack.NETSDK以编程方式进行操作。我似乎能够使用用户名和密码很好地进行身份验证,但在访问已安装的其他服务时,我们会收到错误,提示用户无法使用API端点 我们正在使用的代码在下面,在CreateServer行出现错误之前,它可以正常工作 “无法验证用户身份并检索授权的服务终结点。” 在仪表板中以同一用户身份登录时,我可以在Access and Se

我们在自己的硬件上安装了一个OpenStack系统,安装了所有组件,通过web界面创建了网络和虚拟机,一切看起来都很好

我正在尝试使用openstack.NETSDK以编程方式进行操作。我似乎能够使用用户名和密码很好地进行身份验证,但在访问已安装的其他服务时,我们会收到错误,提示用户无法使用API端点

我们正在使用的代码在下面,在CreateServer行出现错误之前,它可以正常工作

“无法验证用户身份并检索授权的服务终结点。”

在仪表板中以同一用户身份登录时,我可以在Access and Security>>API Endpoints部分中看到所有服务URL,但UserAccess.ServiceCatalog似乎没有填充任何内容


非常感谢任何帮助或指点

openstack.net SDK 1.3.2.0中的
CloudServersProvider
实现使用的默认
IIdentialProvider
是围绕Rackspace的身份验证要求设计的。为了针对不同的OpenStack兼容安装进行身份验证,您需要遵循以下文档中描述的步骤:

以下是当前文件的摘录:

本页描述了针对参考OpenStack安装进行身份验证的过程,包括但不限于DevStack和Rackspace私有云

使用说明 针对引用OpenStack安装的客户端身份验证需要以下内容

创建
CloudIdentityWithProject
的实例,并使用所需的身份验证凭据初始化其属性。
CloudIdentityWithProject
credentials类允许定义OpenStack文档中描述的
tenantName
tenantId
属性

创建OpenStackIdentityProvider的实例,并将先前创建的凭据传递给构造函数

创建服务提供程序实例时,例如
CloudFilesProvider
CloudQueuesProvider
,将
CloudIdentity
参数和上一步中的身份提供程序作为
IIdentialProvider
参数传递null

局限性
OpenStackIdentityProvider
仅支持使用用户名和密码凭据进行身份验证,还可以选择指定租户名称和/或租户ID(称为从Identity Service API v3开始的项目名称和ID)


谢谢,这为我指明了正确的方向。ServiceCatalog现在总共有多个带有“regionOne”的项,但是当我调用ListContainers(region:“regionOne”)时,我现在得到了“用户无权访问请求的服务或区域”。在此处创建。。。你要求我在另一个问题中提出这个问题的请求已经消失,这是否意味着你没有更多的补充?谢谢。发现了我在评论另一个问题时提到的问题,但还不确定最好的解决方法。
 Uri baseUrl = new Uri("http://mycloudip:5000/v2.0");
 CloudIdentity cloudId = new CloudIdentity()
            {
                Username = userName,
                Password = password
            };
 CloudIdentityProvider cip = new CloudIdentityProvider(cloudId, baseUrl);
 UserAccess ua = cip.Authenticate(cloudId);

 CloudServersProvider provider = new CloudServersProvider(cloudId);

 Metadata metaData = new Metadata(); // Add some metadata just because we can
 metaData.Add("Description", "Example 4 - Getting Started");

 string serverName = "Example4";
 string imageId = "48df4181-040e-4821-8723-d9e4ba908d2f";
 string flavorId = "3";

NewServer newServer = provider.CreateServer(serverName, imageId, flavorId, DiskConfiguration.Manual, metaData);