[英]Custom AuthorizeAttribute only works in development environment
這是對以下內容的更新:
我是asp.net開發的新手,這是我第一次部署應用程序。 它在Visual Studio中調試的開發環境中運行良好。 但是當我部署時,我得到了
401(未經授權)
登錄時出錯。
我使用的是Angular前端,該后端要求通過OAuth發送令牌請求。 我收到此令牌,然后嘗試獲取當前的授權用戶。 用戶控制器使用自定義的授權屬性,該屬性繼承AuthorizeAttribute屬性。 這是我收到此錯誤的時間,但僅限於生產環境中。 在開發環境中,使用Visual Studio,iis Express和localdb,一切正常。
所以這是我的問題:可能是什么原因造成的? 在IIS或Visual Studio部署中是否缺少某些配置? 我必須在代碼中的某些地方進行更改以使其在生產環境中工作嗎?
我已經在代碼中做了一些進一步的研究,這就是事情:定制AuthorizeAttribute
在開發環境中就像是一種魅力,但在生產環境中卻沒有。
到目前為止,我發現的是:即使正確發送了令牌, base.IsAuthorized(actionContext)
始終返回false。 我正在使用Chrome ARC插件發送請求。 此外, ClaimsIdentity
似乎找不到'UserId'
聲明。 這是一些編碼:
protected override bool IsAuthorized(HttpActionContext actionContext) {
if (!base.IsAuthorized(actionContext))
return false;
ClaimsPrincipal principal = GetRequestClaimsPrincipal(actionContext.ControllerContext.Controller);
var currentAccountPermission = GetAccountPermission(principal.Identity);
return HasPermission(currentAccountPermission);
}
private ClaimsPrincipal GetRequestClaimsPrincipal(IHttpController controller) {
return ((ApiController)controller).Request.GetRequestContext().Principal as ClaimsPrincipal;
}
private IEnumerable<UserPermission> GetAccountPermission(IIdentity identity)
{
var claimsIdentity = new ClaimsIdentity(identity);
var id = Convert.ToInt32(claimsIdentity.FindFirst("UserId").Value);
var accountPermissions = _userPermissionService.GetPermissionByUserId(id);
return accountPermissions;
}
在這個街區
if (!base.IsAuthorized(actionContext))
return false;
它總是返回false。 在這個街區
var id = Convert.ToInt32(claimsIdentity.FindFirst("UserId").Value);
它拋出一個System.NullReferenceException
提醒這些問題僅在生產環境中發生。
那會是什么呢? 我將數據從開發數據庫復制到生產數據庫,因此錯誤不會出自那里。 HttpActionContext
對象中可能有問題嗎? 開發環境可能發生什么變化,從而使生產環境發生這種變化?
謝謝。
我多次部署應用程序時,都是使用Visual Studio Web Deploy Package
。 我確實做了幾次,只是為了測試我是否做對了。 之后,我開始直接使用Web Deploy
。 我在IIS中的網站樹就像
|-Sites
|----Default
|-------MyApplication
正如我所說,它沒有用。 我決定從頭開始,刪除站點,刪除相關的應用程序池,然后使用Web Deploy
,但是這次我的站點樹就像
|-Sites
|----MyApplication
...現在它起作用了。 原因是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.