一、认证 (authentication) 和鉴权 (authorization)
authentication 和 authorization,其实很简单,举个例子来说:
你要登机,你需要出示你的 passport 和 ticket,passport 是为了证明你张三确实是你张三,这就是 authentication;而机票是为了证明你张三确实买了票可以上飞机,这就是 authorization。
在 computer science 领域再举个例子:
你要登陆论坛,输入用户名张三,密码1234,密码正确,证明你张三确实是张三,这就是 authentication;再一check用户张三是个版主,所以有权限加精删别人帖,这就是 authorization。
证和鉴权有什么本质区别?
个人理解,认证偏向于身份的确认,即是不是这个人,而鉴权偏向于对象权限的认定,即这个人是否有这个权限,所以适用的场所肯定是不一样的
Authentication: The act of verifying the identity of an entity(subject).
Authorization: The act of determining whether a requesting entity(subject) will be allowed access to a resource(object).
二、单点登录
单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
如图所示,图中有4个系统,分别是Application1、Application2、Application3、和SSO。
Application1、Application2、Application3没有登录模块,而SSO只有登录模块,没有其他的业务模块,当Application1、Application2、Application3需要登录时,将跳到SSO系统,SSO系统完成登录,其他的应用系统也就随之登录了,这完全符合我们对单点登录(SSO)的定义。
三、横向越权与纵向越权
横向越权:横向越权指的是攻击者尝试访问与他拥有相同权限的用户的资源
纵向越权:纵向越权指的是一个低级别攻击者尝试访问高级别用户的资源
如何防止横向越权漏洞:
可通过建立用户和可操作资源的绑定关系,用户对任何资源进行操作时,通过该绑定关系确保该资源是属于该用户所有的。
对请求中的关键参数进行间接映射,避免使用原始关键参数名,比如使用索引1代替id值123等
如何防止纵向越权漏洞:
建议使用基于角色访问控制机制来防止纵向越权攻击,即预先定义不同的权限角色,为每个角色分配不同的权限,每个用户都属于特定的角色,即拥有固定的权限,当用户执行某个动作或产生某种行为时,通过用户所在的角色判定该动作或者行为是否允许。
四、参考
横向越权与纵向越权
https://blog.csdn.net/github_39104978/article/details/78265433
How to set the authorization header using curl?
https://stackoverflow.com/questions/3044315/how-to-set-the-authorization-header-using-curl
认证 (authentication) 和授权 (authorization) 的区别
https://blog.csdn.net/cruise_h/article/details/50749652
单点登录原理与简单实现
https://yq.aliyun.com/articles/636281
https://www.cnblogs.com/ywlaker/p/6113927.html