启用 Azure Active Directory 身份验证时,Azure 移动应用将 Http POST 调用重定向到 GET
Posted
技术标签:
【中文标题】启用 Azure Active Directory 身份验证时,Azure 移动应用将 Http POST 调用重定向到 GET【英文标题】:Azure Mobile App redirecting Http POST calls to GET when Azure Active Directory Authentication is enabled 【发布时间】:2017-10-31 15:32:09 【问题描述】:我正在浏览 https://docs.microsoft.com/en-us/azure/app-service-mobile/app-service-mobile-dotnet-backend-how-to-use-server-sdk 上的 Azure 移动应用后端教程的 .NET 部分
我使用默认示例 TodoItemController
很好地设置了所有内容。我通过向PostToDoItem
控制器方法添加代码,将推送通知添加为instructed。
然后我使用 Postman 测试了 POST 调用并放入了一个简单的新项目:
在我的 Xamarin.Forms 移动应用中收到成功推送通知:
但是,当我在移动应用服务中启用 Azure Active Directory 身份验证同时保持“允许匿名请求(无操作)”打开时,我不再能够使用 Postman 发送 POST 调用。更具体地说,看起来应用服务收到了 POST 请求,但会立即将其重定向并生成一个 GET 请求。这会导致调用控制器中的 GetAllToDoItems 方法而不是 PostToDoItem 方法。我在日志流中看到了这一点:
> 2017-05-31T01:33:46 PID[4292] Verbose Received request: POST
> http://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46 PID[4292] Information Redirecting:
> https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46 PID[4292] Verbose Received request: GET
> https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0
> 2017-05-31T01:33:46 PID[4292] Verbose [Routes(Preview)] No
> authorization configuration was found. 2017-05-31T01:33:46 PID[4292]
> Information Request, Method=GET,
> Url=https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0,
> Message='https://XYZ.azurewebsites.net/tables/TodoItem?ZUMO-API-VERSION=2.0.0'
> 2017-05-31T01:33:46 PID[4292] Information Message='TodoItem',
> Operation=DefaultHttpControllerSelector.SelectController
> 2017-05-31T01:33:46 PID[4292] Information
> Message='XYZService.Controllers.TodoItemController',
> Operation=DefaultHttpControllerActivator.Create 2017-05-31T01:33:46
> PID[4292] Information
> Message='XYZService.Controllers.TodoItemController',
> Operation=HttpControllerDescriptor.CreateController
> 2017-05-31T01:33:46 PID[4292] Information Message='Selected action
> 'GetAllTodoItems()'',
> Operation=ApiControllerActionSelector.SelectAction
我希望这个 POST 调用与我将应用服务身份验证设置为 OFF 时一样工作,因为我告诉 Azure 在匿名请求进来时不采取任何行动。我在这里误解了什么吗?提前致谢!
【问题讨论】:
【参考方案1】:我们为应用服务启用认证/授权后,如果我们使用HTTP协议发送请求,服务器会通过302响应重定向到HTTPS。
要使其在这种情况下工作,您可以使用 HTTPS 协议而不是 HTTP 发送请求。如果您启用 允许匿名请求(无操作) 功能,这应该可以工作。
【讨论】:
非常感谢!我看了很长时间,以至于在执行这些步骤时我什至没有注意到我使用的是 HTTP 而不是 HTTPS!以上是关于启用 Azure Active Directory 身份验证时,Azure 移动应用将 Http POST 调用重定向到 GET的主要内容,如果未能解决你的问题,请参考以下文章
在本地和 Azure 上使用 Active Directory 进行身份验证
基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
基于事件驱动架构构建微服务第16部分:Azure Active Directory B2C
Azure B2C 来宾(外部 Azure Active Directory)X 成员(联合 Azure Active Directory)