Azure移动服务,HttpClient,授权

问题描述 投票:7回答:2

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

如何使用HttpClient在custom Authentication/Authorization patterns中使用移动服务自带的身份验证?

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

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

此外,当我使用Mobile Service Client时,为什么我的应用程序密钥,主密钥或用户身份验证密钥总是返回(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";
    }
}
c# .net authentication azure mobile
2个回答
12
投票

“我可以使用.NET的HttpClient来访问Azure移动服务吗?”简短的回答是。简单的方法是在客户端的标头中添加一个this:

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

但是请注意,如果您使用的是本地托管版本,请确保已...

  1. 强制服务认为它已托管,以便启用身份验证。

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

  2. 将应用程序密钥和主密钥添加到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 doc

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

作者注:我个人为此而努力,并且由于该特定样式的文档有限或缺少,我想编写此Q / A。如果您认为我应该添加任何内容,请告诉我。


0
投票

我知道这个线程有点旧,但是,谁能解释一下如何在Node.js中实现它?

我正在使用Azure App Services和MobileServiceClient像这样将客户端SQLite表与Azure SQL数据库同步:await client.SyncContext.PushAsync();

问题是-我不想在App Service上调用App Service身份验证,因为在实例化MobileServiceClient时我已经登录了用户。另外,该应用程序服务设置了匿名访问权限,我要做的就是传递一个应用程序密钥以允许服务访问。

谁能详细说明?

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.