授权访问REST API中的资源
我对构建API是新手,我很难理解如何合理地执行以下任务 有一个端点: /用户/{user_id} 它检索用户的详细信息。 前端代码将请求此端点获取有关用户的详细信息,以显示在仪表板上。 我必须保护此端点,以便不表示此用户id的用户模拟请求以获取有关其他用户的信息授权访问REST API中的资源,rest,Rest,我对构建API是新手,我很难理解如何合理地执行以下任务 有一个端点: /用户/{user_id} 它检索用户的详细信息。 前端代码将请求此端点获取有关用户的详细信息,以显示在仪表板上。 我必须保护此端点,以便不表示此用户id的用户模拟请求以获取有关其他用户的信息 由于基于REST的API是无会话的,所以我无法存储会话密钥。那么,如何确保服务器仅在用户id的所有者请求时才发送用户信息呢?你是对的。HTTP是一种无状态协议,因此REST也继承了这种特性 这是简单的交易 [REST客户端]--->[A
由于基于REST的API是无会话的,所以我无法存储会话密钥。那么,如何确保服务器仅在用户id的所有者请求时才发送用户信息呢?你是对的。HTTP是一种无状态协议,因此REST也继承了这种特性 这是简单的交易 [REST客户端]--->[API端点] 您有许多REST客户机,您需要确保只有经过授权的用户才会授予对API端点的访问权。@James建议的一个解决方案是使用一个令牌机制,比如JWT
如果考虑JWT身份验证,流程将如下:
[REST客户端]--->[AA服务]--->[API端点]中间需要一个AAu授权、身份验证服务。例如,在microservices方法中,这可以从API网关执行,该网关是您所有服务的网关
客户将向AA服务提供其用户名和密码。在exchange中,AA服务将向客户端提供一个仅由服务器签名的JSON令牌,以保护机密性。此令牌包含3个内容 指定令牌类型和用于签名的算法的标头 有效负载,包括令牌的颁发者、令牌何时到期、颁发的用户角色等声明。请参阅 由服务器密钥签名的未签名令牌的产品的签名 然后用base64对每个标头、有效负载、签名进行编码,并用。。你现在有了JWT AA服务返回此JWT以交换凭据。 客户端应安全地存储此令牌,例如:本地存储,并且通信介质应为encryptedex:TLS。看见 之后,对于每个后续的REST调用,客户端应该包括接收到的令牌,最好是在授权报头中,尽管在技术上也可以在消息负载中发送令牌 然后,AA服务负责使用其签名密钥解密令牌,评估JWT中的声明,并根据是否授权API调用向其发送HTTP 401403响应采取行动使用。这里会有更一般化的答案。您可以考虑JWT JSON Web令牌。如果使用JWT令牌,那么用户名不需要通过API,因为令牌可以标识用户本身。您可能需要更改API。不一定。用户id仍然需要传递到其他服务以进行查询。例如,论坛服务需要一个特定的用户id来列出他的回复/评论文章或评论。通知服务可能需要用户id才能向特定用户发送通知。但是没有必要以JWT的形式发送用户id。