使用 C# 在 RackSpace 中更新密码

Updating a Password in RackSpace using C#

我只是想在 RackSpaceCloud 中使用 C# 更改主帐户和子用户的密码,但我将 运行 保留为 UserNotAuthorized 异常。这很奇怪,因为我可以在没有这个错误的情况下做任何其他事情,重置 Api 键,列出用户和用户 ID(等等)。示例代码

 net.openstack.Core.Domain.CloudIdentity cloudIdentity = new CloudIdentity()//Admin Credits
 {
     Username = "me",
     APIKey = "blahblahblah",
 };
 CloudIdentityProvider cloudIdentityProvider = new CloudIdentityProvider(cloudIdentity);
 cloudIdentityProvider.SetUserPassword("correctUserID", "newP@ssw0rd", cloudIdentity);

然后我犯了一个令人困惑的错误,因为像

这样的方法
cloudIdentityProvider.ListUsers(cloudIdentity)
cloudIdentityProvider.ResetApiKey("UserID", cloudIdentity);

工作完美。任何帮助或想法将不胜感激。 哦,顺便说一句,关于异常的附加信息总是相同的。 "Unable to authenticate user and retrieve authorized service endpoints"

这是一个错误。我已经打开 issue 528 但与此同时这里有一个解决方法。

var cloudIdentity = new CloudIdentity
{
    Username = "{username}",
    APIKey = "{api-key}"
};

var cloudIdentityProvider = new CloudIdentityProvider(cloudIdentity);
var userAccess = cloudIdentityProvider.Authenticate(cloudIdentity);

var request = new HttpRequestMessage(HttpMethod.Post, string.Format("https://identity.api.rackspacecloud.com/v2.0/users/{0}", userAccess.User.Id));
request.Headers.Add("X-Auth-Token", userAccess.Token.Id);

var requestBody = JObject.FromObject(new { user = new { username = userAccess.User.Name } });
((JObject)requestBody["user"]).Add("OS-KSADM:password", "{new-password}");
request.Content = new StringContent(requestBody.ToString(), Encoding.UTF8, "application/json");

using (var client = new HttpClient())
{
    var response = client.SendAsync(request).Result;
}

如果需要更改其他用户的密码,使用的云身份必须是管理员,否则非管理员只能更改自己的密码。