C# openstacksdknet上的CloudIdentity(找不到用户)
我正在使用一个云备份客户端,并且我正在尝试使用服务器管理员发送给我的用户凭据进行标识。对于测试,在PythonOpenStack客户机上,一切似乎都工作得很好。我使用高级Rest客户端Chrome扩展来获取令牌:C# openstacksdknet上的CloudIdentity(找不到用户),c#,.net,cloud,openstack,C#,.net,Cloud,Openstack,我正在使用一个云备份客户端,并且我正在尝试使用服务器管理员发送给我的用户凭据进行标识。对于测试,在PythonOpenStack客户机上,一切似乎都工作得很好。我使用高级Rest客户端Chrome扩展来获取令牌: http://xx.xx.xx.xx:5000/v3/auth/tokens POST METHOD Header: Content-Type: application/json Body: { "auth": { "identity": {
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"
}
}
}
}
响应状态为已创建(201):
使用X-Subject-Token,我使用以下命令登录到带有python客户端的openstack服务器:
openstack --os-url http://xx.xx.xx.xx:5000/v3 --os-identity-api-version 3 --os-token=d3b8133fea7846abbe2f023f410e3294
授权是可以的。项目,用户,容器,一切都是完美的。
当我尝试为.NET使用OpenStack API时,问题来了。我以各种形式使用OpenStack SDK.NET和CloudIdentity类(CloudIdentity、CloudIdentityWithProject),响应allays为“找不到用户XXXX(禁用调试模式以抑制这些详细信息”):
该用户存在于服务器中,并具有项目的管理角色。
因此,问题是:
1.这是在openstack服务器中进行身份验证的正确方法吗?
2.如果没有,openstack中是否有更好的备份文件API?不幸的是,目前openstack.NET仅支持openstack Identity v2.0,而不支持v3。也许您可以询问管理员是否有v2标识端点可供您使用 OpenStack.NETV1.5.2中已计划支持identity v3(我们目前使用的是v1.5.0.1)。但这在几个月内不会发生
openstack --os-url http://xx.xx.xx.xx:5000/v3 --os-identity-api-version 3 --os-token=d3b8133fea7846abbe2f023f410e3294
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));
}
}