我正在构建一个单页应用程序(SPA) 和一个RESTful API。API 需要安全性——某些用户只能调用某些端点。我有一个外部身份提供者 (IdP (Okta)),我希望用户使用OpenId Connect协议对其进行身份验证。我试图澄清 SPA 对 RESTful API 的身份验证和授权的正确步骤。我一直在研究的两个流程是授权代码流程和隐式流程。
如果我要使用Implicit flow,那么步骤将是:
- 用户访问 SPA,将用户重定向到 IdP 以登录。
- 用户登录后,IdP 将用户返回到带有访问令牌和 ID 令牌的 SPA。
- (这是我不确定的步骤)每次 SPA 向 RESTful API 发出请求时,它都会将访问令牌和 ID 令牌与请求一起传递,RESTful API 会对其进行验证,然后检查用户是否有权访问特定的端点。如果是,则返回结果,否则用户未经授权。
如果我要使用授权码流程,那么步骤将是:
- 与上述步骤 1 相同。
- 用户登录后,IdP 将用户返回到带有授权码的 SPA。
- (同样,我不确定该步骤是否正确)每次 SPA 向 RESTful API 发出请求时,它都会将授权代码与请求一起传递,然后 RESTful API 与 IdP 交换(连同客户端密码)用于访问令牌和 ID 令牌。它使用这些来检查用户是否可以访问特定的端点。如果是,则返回结果,否则它们是未经授权的。
我认为隐式流程是在这种情况下使用的流程,但是我的步骤正确吗?特别是第 3 步,在每个请求中发送两个令牌,似乎不正确。但我认为我需要两个令牌来验证和确定用户。帮助表示赞赏!