使用c#在RackSpace中更新密码

本文关键字:更新 密码 RackSpace 使用 | 更新日期: 2023-09-27 18:03:59

我只是想用c#更改RackSpaceCloud中的主帐户和子用户的密码,但我一直遇到UserNotAuthorized异常。这很奇怪,因为我可以在没有这个错误的情况下做任何事情,重置Api键,列出用户和userID(等)。示例代码

 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);

工作完美。任何帮助或想法将不胜感激。哦,顺便说一句,关于异常的附加信息总是相同的。"无法对用户进行身份验证并检索授权的服务端点"

使用c#在RackSpace中更新密码

这是一个bug。我已经打开了第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;
}

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