提问人:Abhinav Sinha 提问时间:11/18/2023 最后编辑:Abhinav Sinha 更新时间:11/18/2023 访问量:37
关于 RESTful API 授权的最佳实践和一些疑问
Best practices and some doubts regarding RESTful APIs authorisation
问:
我目前正在 Express.js 中开发一个后端服务器,用户可以使用基本的电子邮件和密码方法或社交登录方法(例如,Google、Facebook)在客户端登录或注册。在我的研究过程中,我遇到了两种潜在的方法:JWT(JSON Web 令牌)和 OAuth 2.0。关于这一点,我有几个问题:
- 我应该使用 JWT 进行授权、OAuth 2.0 还是 双?
- 如果我选择 JWT,验证的最佳实践是什么 他们在服务器端?用 密钥,或者是否有其他推荐的做法?
- 如果我选择 OAuth 2.0,我是否需要创建自己的代理授权服务器来 管理使用电子邮件和密码(而不是 第三方社交账号?
- 还有其他授权吗 生产层面常用的技术,以确保稳健性 安全?
此外,推荐任何有助于理解这些概念的学习资源或材料?
答:
是的,将 JWT(JSON Web 令牌)与 OAuth 2.0 结合使用用于身份验证和授权的不同方面是很常见的。下面是一个常见方案:
用于身份验证的 OAuth 2.0: 使用 OAuth 2.0 处理初始身份验证流,尤其是对于社交登录(例如 Google、Facebook)等方案。 当用户使用第三方身份提供程序(OAuth 2.0 身份验证服务器)登录时,您的服务器会收到授权代码。 将此授权代码交换为访问令牌,并可能交换刷新令牌。 然后,可以使用访问令牌访问第三方服务上的用户资源。 JWT 授权: 服务器对用户进行身份验证(通过 OAuth 2.0 或其他方法(如电子邮件/密码))后,可以生成 JWT 来表示用户的身份和关联的声明。 JWT 可以包含用户角色、权限和其他相关详细信息等信息。 此 JWT 可以发送到客户端,客户端可以将其包含在对 API 的后续请求的标头中。 然后,服务器可以验证 JWT,以确保根据包含的声明对请求进行授权。 通过将 OAuth 2.0 和 JWT 结合使用,您可以利用 OAuth 2.0 进行初始身份验证流程,并使用 JWT 管理应用程序中的授权和访问控制。
下面是一个简化的流程:
用户通过 OAuth 2.0(例如 Google、Facebook)登录。 服务器从 OAuth 2.0 提供程序获取访问令牌。 您的服务器会生成一个包含用户声明(角色、权限)的 JWT。 此 JWT 将发送到客户端。 客户端在 API 请求的标头中包含 JWT。 您的服务器验证 JWT 以授权请求。 此方法在行业标准身份验证 (OAuth 2.0) 和灵活的无状态授权机制 (JWT) 之间提供了良好的平衡。值得注意的是,具体详细信息可能因应用程序要求和要集成的标识提供者而异。
评论