你能分清楚 Authentication 和 Authorization 吗?

它们的意思是这样的:

Authentication 认证
Authorization 授权

认证

认证的目的是让人顺利登入系统。

在 Laravel 中,使用 make:auth Artisan 命令,就能有一个认证系统了:登录、注册和找回密码。

如果一个人没有登录,就想访问登录用户才能访问的地址(比如 /dashboard),理论上就会报 401 Unauthorized 错误。

授权

授权跟用户有关,所以单词里有一个 Author

那么就是说,只有登入系统才是用户,可作为用户的你,能做什么,就需要授权了。

Laravel 在 5.1 版本中引入了 Gate 和 Policy 的概念,就是为了能定义授权、然后给用户使用上授权。

举一个授权的例子:文章置顶。以 Laravel China 为例,不是每一个用户都有文章置顶权限的。

如果用户没有文章置顶权限,但机缘巧合访问到了文章置顶 URL 地址,理论上就会报 403 Forbidden 错误。

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由 Summer 于 6年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7
Summer

言简意赅

6年前 评论

本来还懂的,看到这些报错有些懵逼了。
这里我比较关注语义。

  • 为什么未授权 (Authorization) 要报的是 403 Forbidden 而不是 401 Unauthorized

  • 为什么未认证 (Authentication) 要报的是 401 Unauthorized 而不是403 Forbidden
6年前 评论

401 Unauthorized 表示操作的当事人需要登录,403 Forbidden 表示用户没有操作权限,需要授权。这两个语义很明确了。

你懵逼的地方,可能是:对于某写些操作,如果出错,是考虑给 401 还是 403 好呢?这种情况是有的,比如某一账号被「禁用」了,用户登录失败时,你可以给 401 也可以给 403,因为这在语义上都说得通。

我文中说的是普遍情况。希望对你有帮助 :)

6年前 评论

@zhangbao 不是,我是纠结相同词根的单词没有一一对应啊哈哈 :smile:

Authorization 没有对应到 Unauthorized

6年前 评论

@limxx 这不重要。分清楚 Authentication 和 Authorization 的意思就 OK 了。

6年前 评论
GeekGhc

简洁明了~

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!