我有用於身份驗證的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