Web开发

首页 » 常识 » 问答 » GoWeb开发请求授权
TUhjnbcbe - 2022/4/8 23:10:00
当一个请求离开authenticate()中间件,认证通过后,请求上下文可能存在两种状态:请求上下文中包含User结构体(表示有效、已认证用户)。或者请求上下文包含一个AnonymousUser结构体。接下来的内容,我们将携带这些用户信息到下一阶段,看看如何执行不同授权检查来限制对API接口的访问。具体来说,你将学习如何:添加检查,只允许激活用户才能访问不同的/v1/movies**接口。实现一种基于许可的授权模式,提供细粒度控制用户对接口的访问。要求用户激活不久前我们提到,就授权而言,我们要做的第一件事是限制对/v1/movies**接口的访问,因此,它们只能被通过身份验证(而不是匿名)的用户访问,并且这些用户已经激活了自己的帐户。中间件可以完美地执行这类检查,因此我们可以创建一个requireActivatedUser()中间件方法来完成检查。在这个中间件中,我们从请求上下文中提取出User结构体,然后通过调用IsAnonymous()方法,检查Activated字段来确定请求是否继续执行。具体步骤:如果是匿名用户的话,我们应该返回Unauthorized返回码和“youmustbeauthenticatedtoaccessthisresource”错误消息给客户端。如果不是匿名用户(例如经过认证的已知用户),但是没有激活的话就返回Forbidden返回码和“youruseraccountmustbeactivatedtoaccessthisresource”错误消息给客户端。记住:如果没有认证的话,应该使用Unauthorized响应,当用户通过身份验证但不允许执行所请求的操作时,应该使用Forbidden响应。因此,我们先在cmd/api/error.go文件中添加一些帮助函数来发送这些错误信息。如下所示:File:cmd/api/errors.go

packagemain...func(app*application)authenticationRequiredResponse(w

1
查看完整版本: GoWeb开发请求授权