我有用于身份验证的Azure移动服务。我有一个自定义身份验证提供者,一旦证实,返回以下信息:401向Azure移动服务提出请求时未经授权
JwtSecurityToken token = AppServiceLoginHandler.CreateToken(claims, signingKey, audience, issuer, null);
return Ok(new LoginResult()
{
AuthenticationToken = token.RawData,
User = signinedInUser,
StatusCode = System.Net.HttpStatusCode.OK
});
通知之Timespan
设置为null
所以令牌不会过期。
然后向我的AMS发出后续请求,该请求的控制器受到Authorize()
属性的保护。然而,在我的任何断点被击中之前,这些都是失败的,并有401 Unauthorized
响应。
我可以从天青日志看到这种情况的发生:
2017-10-05T12:18:54 PID [5524]信息请求时,方法= POST, URL = https://mywebsite.azurewebsites.net/api/userinfo/update, 消息= 'https://mywebsite.azurewebsites.net/api/userinfo/update'
2017-10-05T12:18:54 PID [5524]信息消息= '的UserInfo', 操作= DefaultHttpControllerSelector.SelectController
2017-10-05T12:18:54 PID [5524]信息 消息= 'MyAMS.Controllers.UserInfoController', 操作= DefaultHttpControllerActivator.Create
2017-10-05T12:18:54 PID [5524]信息 消息= 'MyAMS.Controllers.UserInfoController', 操作= HttpControllerDescriptor .CreateController
2017-10-05T12:18:54 PID [5524]信息消息= '所选动作 '更新(用户cpUser)'', 操作= ApiControllerActionSelector.SelectAction
2017-10-05T12 :18:54 PID [5524]信息消息='将使用相同的 'JsonMediaTypeFormatter' 格式化 ' 操作= JsonMediaTypeFormatter.GetPerRequestFormatterInstance
2017-10-05T12:18:54 PID [5524]信息消息= '所选 格式化=' JsonMediaTypeFormatter',内容类型='应用/ JSON ; 字符集= UTF-8 '',操作= DefaultContentNegotiator.Negotiate
2017-10-05T12:18:54 PID [5524]信息 操作= AuthorizeAttribute.OnAuthorizationAsync,状态= 401 (未授权)
2017-10-05T12:18:54 PID [5524]信息 Operation = UserInfoController。ExecuteAsync,状态= 401(未授权)
2017-10-05T12:18:54 PID [5524]信息响应,状态= 401 (未授权),方法= POST, URL = https://mywebsite.azurewebsites.net/api/userinfo/update, 消息=“内容型='应用/ JSON;字符集= UTF-8' , 内容长度=未知”
可以看到,在授权属性被设定的401响应:
2017-10-05T12:18:54 PID [ 5524]信息 操作= AuthorizeAttribute.OnAuthorizationAsync,状态= 401 (未授权)
在客户端,我的填充两个用户ID和验证令牌:
this.client = new MobileServiceClient("https://mywebsite.azurewebsites.net");
var user = UserProfileService.GetCurrentSignedInUser();
client.CurrentUser = new MobileServiceUser(user.UserId.ToString())
{
MobileServiceAuthenticationToken = user.AuthToken
};
并逐步完成代码我已确认UserID与用户的相匹配,并且AuthToken与我的登录方法中返回的AutToken相同。
是否还有其他需要设置/可以启用对Azure移动服务的已验证请求?
感谢
编辑 因为我已经禁用了Azure的所有其他认证提供但这并没有解决问题。 我也在本地调试了代码,并且只有在部署到Azure时,我的本地主机上才会运行该问题。
我能想到的唯一的事情是我打开了Facebook身份验证提供程序,因为我的应用程序还提供了FB登录。但是,我仍然可以使用我的自定义身份验证登录,它只是对发生故障的服务提出的后续请求。我尝试过使用fiddler并得到相同的{“message”:“授权已被拒绝。”}响应。 – LDJ
您的自定义autodapicontroller可以匿名访问,而此问题的控制器具有'Authorize'属性。您可以尝试暂时移除FB提供商以缩小此问题的范围。另外,请尝试在本地运行您的服务器端项目,然后尝试检查自定义身份验证是否可以在本地运行。 –
嗨布鲁斯,我已经删除了FB提供程序,并得到相同的结果,401未经授权的错误。有没有办法更好地理解为什么它的未经授权? – LDJ