将SPA中的client_id和client_secret发送到auth服务器有什么意义?

Rya*_*Mes 6 javascript oauth-2.0 single-page-application

我试图了解oauth和openid connect中的一些概念.为了提供一些上下文,假设我正在构建一个与一堆微服务对话的SPA(单页面应用程序).用户需要在访问任何数据之前(通过应用程序)对自身进行身份验证,并且用户将在受信任的站点上对自己进行身份验证.

查看oauth 2和一些建议的流程,资源所有者密码凭证授权似乎是合适的候选者.

 +----------+
 | Resource |
 |  Owner   |
 |          |
 +----------+
      v
      |    Resource Owner
     (A) Password Credentials
      |
      v
 +---------+                                  +---------------+
 |         |>--(B)---- Resource Owner ------->|               |
 |         |         Password Credentials     | Authorization |
 | Client  |                                  |     Server    |
 |         |<--(C)---- Access Token ---------<|               |
 |         |    (w/ Optional Refresh Token)   |               |
 +---------+                                  +---------------+
Run Code Online (Sandbox Code Playgroud)

我读过的一些文章说,在请求授权时,您应该使用您的有效负载(用户名,密码等)将您的client_id和client_secret发送到授权服务器.我的问题是,这适用于SPA吗?不能有人只是检查你的JavaScript,看看你的client_id和client_secret是什么?发送此信息有什么意义吗?

Joã*_*elo 6

您是对的,SPA 本身无法保密或执行客户端身份验证,因此发送client_secret.

在 OAuth2 世界中,这些客户端被称为公共客户端或非机密客户端,与能够执行客户端身份验证的机密客户端相对,例如,传统的服务器端应用程序可以在服务器端。

执行客户端身份验证不是强制性的,但是,您将无法根据确定的客户端身份来执行决策。