IdentityServer4是不是权限管理系统,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
我们通常理解IdentityServer4是身份认证授权管理系统,那么我们可否理解成IdentityServer是身份认证权限管理系统呢?
通过其名称可知IdentityServer4就是对于在跨网站或者跨应用程序间为用户提供一个稳定的身份,这里所谓的不可变应该在会话期间用户身份不可变,比如用户Id,出生日期等等。
但是IdentityServer4并不适合用于让客户端或者API知道允许用户做什么,比如读取一篇文档。
因为IdentityServer4说到底就是Token服务,可能有了解过IdentityServer4的童鞋说,通过声明来构建用户权限啊,其实声明并不是传输权限特别好的媒介。为何,当然基于以下几点原因。
声明本身就是用来构建用户的身份而非权限。
声明的数据结构非常简单仅仅只是字符串,而权限数据结构非常复杂。
用户权限依赖于不同的客户端和APi,将用户权限放在单个身份中显然有问题,那么是否有可能按需获取呢?这是需要考虑的问题。
用户权限在整个会话期间可能会改变,这个时候需要重新获取Token,但是获取Token的方式需要UI交互,这个时候肿么办。
权限和业务逻辑可能会有重叠的地方,这个时候如何划分边界呢?
有时候我们可能通过URL传输Token,但是浏览器URL长度有限制,如果用户权限存储在声明中,岂不是也会出问题?
基于以上几点,我个人认为不能将身份和用户权限进行混用,说到底IdentityServer4根本不是为了用户权限应运而生,也没提供对应的解决方案,我们想要实现用户权限还需要做很多额外的工作。
当然,如果项目小或者私下玩玩将声明当做权限,然后通过Token返回,并不是什么问题,只不过我想表达的是IdentityServer4不是用作用户权限的管理系统。
这里我们还需引入另外一个概念,那就是角色,我们将身份、角色、权限串联起来,好像很顺畅,用户的身份属于什么角色,对应角色赋予怎样的权限,这个时候好像似乎用声明来授予用户权限未尝不可,其实如果对用户授权是基于用户的身份,那么将用户权限通过声明来使用是非常可取的。
可能又有人疑惑了,IdentityServer4里有Scope即范围,不是可用作用户权限吗?请不要随便扣帽子,IdentityServer4中的Scope指的是授予客户端权限,而非用户权限。
声明是用来构建身份而不是用户权限,不能将身份和权限在Token服务中混用,如果对用户授权是基于用户的身份,那么使用声明也未尝不可。
关于IdentityServer4是不是权限管理系统问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。