具有自定义身份验证的Azure移动服务.NET客户端缺少X-ZUMO-AUTH标头和失败的API身份验证

时间:2015-11-07 16:20:38

标签: authentication azure-mobile-services

我有以下情况:

1)Azure移动服务API 2)自定义验证 3)Web和Xamarin客户端 4)小型测试工具(使用MSTest的.NET应用程序)

使用自定义身份验证,我可以从浏览器和单元测试中登录并获取相应的用户ID和令牌。

这样的事情:

  var user = await Connect.MobileClient
            .InvokeApiAsync<LoginRequest, MobileServiceUser>(
            "CustomLogin", new LoginRequest()
            {
                username = username,
                password = password
            });

然后我执行以下操作:

Connect.MobileClient.CurrentUser = user;

调试清楚地表明正确设置了userId和MobileServicesAuthenticationToken。

然而,当我在控制器上调用POST时,在控制器上的Initialize方法执行后,我会被未经授权抛出。

一些注意事项:

1)如果我从&#34开始发布POST,那么一切都会顺利运行;试试这个&#34; (在X-ZUMO-AUTH标头中注册,登录和粘贴标记值之后)。 2)同样,如果我删除了没有问题     [AuthorizeLevel(AuthorizationLevel.User)] 来自控制器类或方法(两者都试过)。

这是失败的帖子(来自Fiddler):

POST https://anapi.azure-mobile.net/tables/Organization__systemproperties=__createdAt%2C__updatedAt%2C__version%2C__deleted HTTP/1.1
X-ZUMO-FEATURES: TT
X-ZUMO-INSTALLATION-ID: dfddf760-ecef-49cb-8197-2faaaaa11502
X-ZUMO-APPLICATION: aaaaaauJOUyfFjjPmZpobTybtaaaaaa
Accept: application/json
User-Agent: ZUMO/1.3 (lang=Managed; os=Windows; os_version=6.2.0.9200;     arch=Win32NT; version=1.3.30324.0)
X-ZUMO-VERSION: ZUMO/1.3 (lang=Managed; os=Windows; os_version=6.2.0.9200;     arch=Win32NT; version=1.3.30324.0)
Content-Type: application/json; charset=utf-8
Host: anapi.azure-mobile.net
Content-Length: 110
Expect: 100-continue
Accept-Encoding: gzip

{"OrganizationId":0,"Name":"International Bozo, Inc.","Address":"Dallas, Texas","Accounts":null,"Courses":null}

&#34;尝试这个&#34; HTTP POST包含带有相应令牌的X-ZUMO-AUTH标头。

1 个答案:

答案 0 :(得分:1)

您需要在调用client.invokeAPI方法之前设置client.currentUser属性(从您的问题看,您正在执行其他顺序)

然后从user.MobileAuthenticationToken填充X-ZUMO-AUTH标头 如下图所示: https://github.com/Azure/azure-mobile-services/blob/master/sdk/Managed/src/Microsoft.WindowsAzure.MobileServices/Http/MobileServiceHttpClient.cs#L566-L569