我有以下情况:
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标头。
答案 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