openstacksdknet 上的 CloudIdentity(找不到用户)
CloudIdentity on openstacksdknet (Could not find user)
我正在使用 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"
}
}
}
}
响应的状态为已创建 (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 APIs 用于 .NET 时。我在所有形式(CloudIdentity、CloudIdentityWithProject)中使用 OpenStack SDK .NET 和 CloudIdentity Class,响应是 "Could not find user XXXX (Disable debug mode to suppress these details.)":
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));
}
}
该用户存在于服务器中并且具有该项目的管理角色。
所以问题是:
1. 这是在 openstack 服务器中进行身份验证的正确方法吗?
2.如果没有,openstack中备份文件有没有更好的API?
遗憾的是,目前OpenStack.NET仅支持OpenStack Identity v2.0,不支持v3。也许您可以询问您的管理员是否有可供您使用的 v2 身份端点?
roadmap 已计划在 OpenStack.NET v1.5.2 中支持身份 v3(我们目前使用的是 v1.5.0.1)。但这几个月内不会发生。
我正在使用 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"
}
}
}
}
响应的状态为已创建 (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 APIs 用于 .NET 时。我在所有形式(CloudIdentity、CloudIdentityWithProject)中使用 OpenStack SDK .NET 和 CloudIdentity Class,响应是 "Could not find user XXXX (Disable debug mode to suppress these details.)":
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));
}
}
该用户存在于服务器中并且具有该项目的管理角色。 所以问题是: 1. 这是在 openstack 服务器中进行身份验证的正确方法吗? 2.如果没有,openstack中备份文件有没有更好的API?
遗憾的是,目前OpenStack.NET仅支持OpenStack Identity v2.0,不支持v3。也许您可以询问您的管理员是否有可供您使用的 v2 身份端点?
roadmap 已计划在 OpenStack.NET v1.5.2 中支持身份 v3(我们目前使用的是 v1.5.0.1)。但这几个月内不会发生。