2017-06-05 140 views
0

我迷失在所有可能用于管理用户可以做什么和用户不能做什么的选项中。 我从角色开始:[Authorize(Roles = Constants.Roles.ModeratorAndUp)]。 ModeratorAndUp的字符串是"Moderators, Administrators"
但我需要更灵活的方法。在过去的3个小时里,我正在阅读有关索赔和许可证。我还发现这个有趣的博客postASP.NET核心权限

我正在使用Angular和ASP.NET Core以及Universal模板。对于身份验证,我使用OpenIddict我正在看一本书。

我想使用JWT令牌进行授权和验证。我不知道在.NET Core中应该如何处理权限,但我拥有100个不同的角色,并且它完全混乱。而且当我创建新用户时,我需要手动将其添加到20个角色中。这将是很好如果我可以创建具有角色/权限的组,然后将用户添加到该组。但不知道这个设计将如何使用OpenIdDict和JWT令牌授权。

有人可以指出我正确的方向,然后我会自己研究。
我不确定我应该建立一些系统,当我更改组权限/角色时,会自动更新用户角色,我应该使用索赔...我想使用[Authorize]属性,因为它真的可以简化事情。

在ASP.NET Core中执行JWT令牌认证/授权的最佳做法是什么/如何。

+1

想想角色为一组索赔,那么你就会知道如何解决这个问题 – Tseng

+1

'但不知道这种设计如何与OpenIdDict和JWT令牌授权配合使用。:使用OpenIddict声明与使用Cookie中间件声明完全没有区别(在引擎盖下,授权堆栈并不取决于您的方式认证你的用户,所以相同的概念适用于cookie和令牌)。正如@ssmith所建议的那样,我还会使用特权/权限。如果您认为最终会在您的令牌中添加太多索赔,请不要错过https://stackoverflow.com/questions/42496306/openidconnect-access-token-size-and-accessing-claims-server-side。 – Pinpoint

回答

1

认为索赔比角色更灵活一点。也就是说,如果复杂的业务规则不一定简单地映射到用户所属的组,则可以将权限封装到特权中(负责确定给定用户是否对给定资源具有某种特权的类)。查看更多在这里:http://ardalis.com/favor-privileges-over-role-checks

这往往会减少很多条件的复杂性在你的UI层,以我的经验