当我使用Azure的应用服务,为我的API(ASP.NET核心),我有这样的Azure的移动应用程序调用invokeApi
[Route("api")]
public class PingController : Controller
{
[HttpGet]
[Route("ping")]
public string Ping()
{
return "Pong";
}
[Authorize]
[HttpGet("claims")]
public object Claims()
{
return User.Claims.Select(c =>
new
{
Type = c.Type,
Value = c.Value
});
}
}
的API控制器然后我试图访问获得401错误这从这样
this.client = new WindowsAzure.MobileServiceClient('https://mysite.azurewebsites.net/');
this.client.login('google').then(result=>{
this.client.invokeApi("claims", {
body: null,
method: "get"
}).done(function (results) {
alert(JSON.stringify(results));
}, function (error) {
let msg = error.message;
let request = error.request;
alert(msg+';'+request.status);
});
});
登录屏幕Ionic2(打字稿&科尔多瓦)实施正确显示了与服务被调用,但失败,401错误。它可以工作,如果我打电话给'平'服务。 HTTP调用具有X-谟头,我认为应该是很好的验证(?):
GET /api/claims HTTP/1.1
Host: mysite.azurewebsites.net
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
ZUMO-API-VERSION: 2.0.0
X-ZUMO-INSTALLATION-ID: 10badf87-...
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
X-ZUMO-AUTH: eyJ0eXAiOiJKV...
accept: application/json
X-ZUMO-VERSION: ZUMO/2.0 (lang=Cordova; os=--; os_version=--; arch=--; version=2.0.0-41128.193844)
Referer: http://localhost:8000/index.html
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8
Cookie: ARRAffinity=4df5cc005....
Azure的应用程序调试日志只是表明IIS的默认401屏幕。称该资源已被视为“匿名”访问。 我之前使用过Auth0,您必须在应用配置中注册JWT Bearer选项。但对于Azure,我没有看到任何教程做类似的步骤。那么,我错过了什么让这个工作?
那么将授权标头添加到您的声明请求中。您从登录中获得结果,使用它 – misha130
@ misha130这就是X-ZUMO-AUTH标题存在的原因。 https://docs.microsoft.com/en-us/azure/app-service/app-service-authentication-overview – n00b