我目前正在使用MVC 5
和Web API 2
構建具有JWT和OWIN認證的Web API。我似乎有所有這些按預期工作。不過,我現在想實施角色授權,目前正在打牆。帶JWT承載令牌和自定義授權屬性的標誌角色枚舉
我知道,你的終點,你可以指定Authorize
屬性是這樣的:
[Authorize(Roles="Admin")]
我想建立基於角色的授權,以更好地處理什麼,我需要更強的類型化的解決方案,而這正是我打了一堵牆。
現在我有當用戶提交一個username
和password
我oauth/token
端點這看起來在我的數據庫中的用戶,並返回已經存儲了用戶enum Flag
產生我JWT
。獲取用戶信息後,我創建了我的ClaimsIdentity
像這樣一個Role Claim
:
private void GenerateIdentityRoles()
{
_identity.AddClaim(new Claim(ClaimTypes.Role, _userRole.Roles.ToString()));
}
只是爲了進一步澄清GenerateIdentityRoles
方法被稱爲我的生成令牌和_userRole
從數據庫返回我的驗證的用戶記錄的過程。 Roles
參數是我存儲的枚舉標誌。
從那裏我的Bearer
令牌返回給用戶,然後它可以用於擊中用[Authorize]
屬性裝飾的任何端點。
有沒有一種方法可以創建一個繼承自AuthorizeAttribute
類的自定義屬性,該類將以與[Authorize(Roles="Admin")]
相同的方式工作?但是,被指定的字符串類型,而不是我可以指定[AuthorizeRolesAttribute(UserRoleEnum.Admin)]
然後我AuthorizeRolesAttribute
類內搭傳入Roles Claim
從智威湯遜承載令牌,將其轉換回枚舉標誌,然後檢查,看它是否包含指定的標誌HasFlag
方法?
請注意,我不是太在意,此刻與轉換從令牌的角色聲明的字符串返回,但更獲得它。此外,這對我來說都是一個非常新的概念,所以我真的只是在學習。如果我的理解有誤,我完全接受推理和其他解決方案。
謝謝您的回覆。看起來您提供給'AuthorizeAttribute'源的鏈接已損壞。你能爲我複查嗎?謝謝! – scapegoat17
你的意思是這個[link](https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Http/AuthorizeAttribute.cs)?如果是這樣,我沒有看到一種方法來覆蓋傳入的角色聲明。你有什麼想法如何實現這一目標? – scapegoat17