[英]Azure Mobile Services, HttpClient, Authorization
我可以使用 .NET 的 HttpClient 来访问 Azure 移动服务吗?
如何使用 HttpClient 在自定义身份验证/授权模式中使用移动服务自己的身份验证?
这总是返回 401,因为我没有传入任何身份验证凭据:
var client = new HttpClient();
var response = client.GetAsync("http://localhost:49190/api/test").Result;
此外,为什么当我使用Mobile Service Client 时,为什么我的应用程序密钥、主密钥或用户身份验证密钥总是返回 (401) Unauthorized?
客户:
var mobileClient = new MobileServiceClient("http://localhost:49190/", "[my key]");
var response = mobileClient.InvokeApiAsync("test").Result;
服务端:
[AuthorizeLevel(AuthorizationLevel.Application)]
public class TestController : ApiController
{
public ApiServices Services { get; set; }
// GET api/Test
public string Get()
{
Services.Log.Info("Hello from custom controller!");
return "Hello";
}
}
“我可以使用 .NET 的 HttpClient 访问 Azure 移动服务吗?” 简短的回答是肯定的。 简单的方法是将 this 添加到客户端的标头中:
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-ZUMO-APPLICATION", "[my key]");
不过要小心,如果您使用的是本地托管版本,您需要确保您已经...
强制服务认为它是托管的,以便启用身份验证。
(在 App_Start/WebApiConfig.cs: config.SetIsHosted(true);
将应用程序密钥和主密钥添加到 web.config:
<appSettings> <add key="MS_MasterKey" value="[your master key]" /> <add key="MS_ApplicationKey" value="[your app key]" /> </appSettings>
如果没有 #1,跨服务的身份验证将被完全忽略,因此您不知道您在客户端中添加的身份验证是否正常工作。 如果没有 #2,您可以随心所欲地将密钥添加到客户端(从 Azure 获得),但它总是会返回 401。这可能是关于使用MobileServiceClient
总是返回 401 的第二个问题的答案。
最后,您总共可以使用三个不同的标题。 您可以根据不同的授权级别使用每一个。 从这个MSDN 文档:
作者注:我个人一直在努力使其工作,并且由于这种特定风格的文档有限或缺失,我想写这个 Q/A。 如果您认为我应该添加任何内容,请告诉我。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.