PHP / REST - 如何实现对 API 的基于角色的访问?
PHP / REST - How do I implement a role based access of my API?
我已经使用 API 中心方法启动了一个 PHP 项目(项目管理项目跟踪工具),并且有了一个相当好的开始。
到目前为止我已经创建了 2 个 GET
方法 我想限制访问但不知道从哪里开始。
在我的数据库上下文中
Project
是封装不同actionitems的容器。
Actionitems
是 'assigned' 到 user
.
Users
存在于数据库中。
Roles
分配给用户。 (User
, Admin
, Super
)
用户只能更新自己的项目
管理员有创建和更新权限
超级拥有总管理权限
My question is: Where should I start in PHP to only allow
accessing the api via proper users, either via a login api, or some
other means? Any help to get started would get me going.
首先,我已经成功创建了一个端点来访问访问资源(操作项),使用 JSON 字符串来测试响应。
我要限制的现有端点
GET /api/actionitems/
用一般结构访问table内的特定资源如下:
GET /api/actionitems/4
请注意,应按如下方式访问其他 api 端点
每条路线最多 3 个路线标记 (在 /api/ 之后)
GET /api/users/123/actionitems (get all actionitems for user 123)
GET /api/users/123/actionitems?<more-filers> applies further filtering
您可能想查看 JWT 令牌
https://jwt.io/
这里有一些快速信息
带token的API是无状态的,每次请求都要发送token,一般在Authorization中Header,token可以包含一些payload用户 ID、创建和过期时间等数据。
在服务器端,当您收到带有请求的令牌时,您可以在有效负载中找到用户 ID,并在数据库中找到相应的用户。
由于没有私钥无法修改令牌,因此您可以信任收到的数据。
然后您可以检查用户是否具有某些管理员或超级管理员角色,或者该项目是否属于他并发送正确的回复。
注意:token里面的payload是public意思是大家都可以看,不要放任何敏感信息。
如果您想使用一些长期身份验证,您可以将刷新令牌与 jwt 令牌一起使用,它们存储在数据库中,可用于创建新的 jwt 令牌。
希望对您有所帮助。
您需要为您的API处理身份验证和授权。
这些是了解解决方案的非常基本的步骤:
- 客户端使用用户凭据(用户名、密码)调用登录 API。
- 服务器验证 用户凭据并生成令牌。
- 服务器根据经过身份验证的用户 ID 将此令牌存储在数据库中并响应客户端。
- 服务器已经具有访问数据库中与此经过身份验证的用户关联的不同 API 的授权角色权限。
- 客户端使用登录 API.
提供的令牌调用资源 APIs
- 服务器验证数据库中的令牌并根据此令牌获取用户和用户角色权限以进行授权。
- 资源APIs 授权并提供所需数据或根据经过身份验证的用户角色权限执行操作。
有多种方法可以以标准化方式实现此目的:
我已经使用 API 中心方法启动了一个 PHP 项目(项目管理项目跟踪工具),并且有了一个相当好的开始。
到目前为止我已经创建了 2 个 GET
方法 我想限制访问但不知道从哪里开始。
在我的数据库上下文中
Project
是封装不同actionitems的容器。Actionitems
是 'assigned' 到user
.Users
存在于数据库中。Roles
分配给用户。 (User
,Admin
,Super
)
用户只能更新自己的项目
管理员有创建和更新权限
超级拥有总管理权限
My question is: Where should I start in PHP to only allow accessing the api via proper users, either via a login api, or some other means? Any help to get started would get me going.
首先,我已经成功创建了一个端点来访问访问资源(操作项),使用 JSON 字符串来测试响应。
我要限制的现有端点
GET /api/actionitems/
用一般结构访问table内的特定资源如下:
GET /api/actionitems/4
请注意,应按如下方式访问其他 api 端点
每条路线最多 3 个路线标记 (在 /api/ 之后)
GET /api/users/123/actionitems (get all actionitems for user 123)
GET /api/users/123/actionitems?<more-filers> applies further filtering
您可能想查看 JWT 令牌 https://jwt.io/
这里有一些快速信息
带token的API是无状态的,每次请求都要发送token,一般在Authorization中Header,token可以包含一些payload用户 ID、创建和过期时间等数据。
在服务器端,当您收到带有请求的令牌时,您可以在有效负载中找到用户 ID,并在数据库中找到相应的用户。 由于没有私钥无法修改令牌,因此您可以信任收到的数据。
然后您可以检查用户是否具有某些管理员或超级管理员角色,或者该项目是否属于他并发送正确的回复。
注意:token里面的payload是public意思是大家都可以看,不要放任何敏感信息。
如果您想使用一些长期身份验证,您可以将刷新令牌与 jwt 令牌一起使用,它们存储在数据库中,可用于创建新的 jwt 令牌。
希望对您有所帮助。
您需要为您的API处理身份验证和授权。
这些是了解解决方案的非常基本的步骤:
- 客户端使用用户凭据(用户名、密码)调用登录 API。
- 服务器验证 用户凭据并生成令牌。
- 服务器根据经过身份验证的用户 ID 将此令牌存储在数据库中并响应客户端。
- 服务器已经具有访问数据库中与此经过身份验证的用户关联的不同 API 的授权角色权限。
- 客户端使用登录 API. 提供的令牌调用资源 APIs
- 服务器验证数据库中的令牌并根据此令牌获取用户和用户角色权限以进行授权。
- 资源APIs 授权并提供所需数据或根据经过身份验证的用户角色权限执行操作。
有多种方法可以以标准化方式实现此目的: