2

我在使用 ACS 管理 API 和对称密钥时遇到了一些问题。当我通过 API 向 ACS 添加服务身份并设置对称密钥时,似乎 ACS 正在更改我发送的密钥。

如果我将“xyz123”作为对称密钥的值传递...当我转到 ACS 管理门户并查看该值时,它是一个不同的字符串;让我们说“AHDyDG6236 =”。

如果我向 API 询问它返回给我的值“xyz123”(ServiceIdentityKey.Value)。

您需要登录的值是“AHDyDG6236=”,但如果不访问 ACS 门户并单击“显示密钥”按钮,就无法获取此值?

无论如何,无需进入 ACS 管理门户即可获得对称密钥的可用值?

这是一些示例代码,说明了我在说什么。它基于此处找到的示例:http: //msdn.microsoft.com/en-us/library/hh135148.aspx

    var svc = ManagementServiceHelper.CreateManagementServiceClient();
    var password = Encoding.UTF8.GetBytes("password");
    var serviceIdentity = svc.CreateServiceIdentity("testSI", password, ServiceIdentityKeyType.Symmetric, ServiceIdentityKeyUsage.Password);
    serviceIdentity.Description = "service identity for testing";
    svc.SaveChangesBatch();
    var svc2 = ManagementServiceHelper.CreateManagementServiceClient();
    var si = svc2.GetServiceIdentityByName("testSI");
    Console.WriteLine(Encoding.UTF8.GetChars(si.ServiceIdentityKeys[0].Value)); //prints out "password"

运行此代码后,转到 ACS 门户并单击对称密钥,然后单击“显示密钥”,它会显示生成/散列值...这是您进行身份验证所需的值...但没有从 API 中获取该值的方法是什么?

4

2 回答 2

2

您遇到的问题在Encoding.UTF8.GetBytes("password") 中。

发送到服务器的字符串被编码为 base64,因此您需要使用不同的函数来获取您的字节数组。 Convert.FromBase64String("密码")

此页面上的示例是错误的,但我已联系他们的团队让他们知道,希望他们能解决它。 如何使用访问控制服务

于 2014-01-16T15:37:50.417 回答
0

我希望它会忽略您发送的密钥 - 您创建服务身份,ACS 将生成一个新密钥,并将其提供给您未来的会话。请参阅此页面上的“证书和密钥管理指南”:http: //www.windowsazure.com/en-us/manage/services/other/manage-acs/以了解 ACS 如何允许您管理密钥。

于 2013-11-18T11:28:02.287 回答