Azure移动服务,HttpClient,授权

我可以使用.NET的HttpClient来访问Azure Mobile服务吗?

如何使用HttpClient对移动服务自带的自定义身份validation/授权模式进行身份validation ?

这总是返回401,因为我没有传递任何身份validation凭据:

var client = new HttpClient(); var response = client.GetAsync("http://localhost:49190/api/test").Result; 

此外,为什么我使用移动服务客户端 ,为什么我的应用程序密钥,主密钥或用户身份validation密钥总是返回(401)未授权?

客户:

 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 Mobile服务吗?” 简短的回答是肯定的。 简单的方法是将其添加到客户端的标头:

  var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-ZUMO-APPLICATION", "[my key]"); 

但是要小心,如果你使用的是本地托管版本,你需要确保你…

  1. 强制服务认为它是托管的,以便启用身份validation。

    (在App_Start / WebApiConfig.cs中: config.SetIsHosted(true);

  2. 将应用程序密钥和主密钥添加到web.config:

         

如果没有#1,将完全忽略整个服务的身份validation,因此您不知道在客户端中添加身份validation的方式是否正常。 如果没有#2,您可以将密钥添加到客户端(您从Azure获得),但它始终会返回401.这可能是发布的第二个问题的答案,该问题涉及使用MobileServiceClient始终返回401。

最后,总共可以使用三种不同的标题。 您可以使用每个不同级别的授权。 从这个MSDN文档 :

  • X-ZUMO-APPLICATION – 移动服务的应用密钥。 必要时,必须指定有效的应用程序密钥才能访问表操作。 这是默认的表操作访问权限。
  • X-ZUMO-AUTH – 经过身份validation的用户的服务生成的身份validation令牌。 必要时,必须为经过身份validation的用户指定令牌才能访问表操作。
  • X-ZUMO-MASTER – 服务主密钥。 只有在需要管理员访问权限才能访问表操作时,才应包含此密钥。

作者说明:我个人很难让这个工作,并且对于这种特定的风格有限或缺少文档,我想写这个Q / A. 如果您认为我应该添加任何东西,请告诉我。