如何安全地发送clientid和clientsecret,而不使用oauth,而是使用angular和dotnet自定义实现

如何安全地发送clientid和clientsecret,而不使用oauth,而是使用angular和dotnet自定义实现,angular,rest,.net-core,jwt,authorization,Angular,Rest,.net Core,Jwt,Authorization,我有一个问题,试图解决了几天,仍然没有得到任何严格的解决方案 我有一个angular应用程序,它将是公开的,所以打开网站不需要登录名或凭据,用户id是从当前loggedin用户获取的。jwt令牌是通过在身体中传递clientid和clientsecret,并从前端传递get动词来获取的 我有一个后端,需要使用clientId和clientSecret进行身份验证,以获取access\u令牌,然后使用access\u令牌调用api来发布/放置/删除信息 如果我把clientId和clientSec

我有一个问题,试图解决了几天,仍然没有得到任何严格的解决方案

我有一个angular应用程序,它将是公开的,所以打开网站不需要登录名或凭据,用户id是从当前loggedin用户获取的。jwt令牌是通过在身体中传递clientid和clientsecret,并从前端传递get动词来获取的

我有一个后端,需要使用clientId和clientSecret进行身份验证,以获取access\u令牌,然后使用access\u令牌调用api来发布/放置/删除信息

如果我把clientId和clientSecret放在代码中,黑客就可以窃取并使用它

有人建议在后端启用CORS,以确保只处理来自我的站点的请求。我已经知道了,但是知道了clientId和clientSecret,即使CORS是允许的,黑客也可以通过添加origin和referer作为头从postman发送请求

前端:角度 后端:dotnet 我们不使用oauth provider,因为该应用程序是公开的用户内部应用程序

问题:通过get主体传递这些clientid和clientsecret。这确实是不安全的


我刚刚进入这个项目,我意识到以前的开发人员使用了这种不安全的实现。

听起来您正在使用OpenID Connect/OAuth 2.0的
客户机凭据流
作为公共客户机,但它是用于机密客户机的,例如用于机器到机器的通信,比如服务器到服务器。ClientSecret应该只用于机密客户端,毕竟,它实际上是一个秘密,因此将其嵌入Angular应用程序等公共客户端没有任何意义

您应该实现另一个流,而不是
客户端凭据流
,它更适合公共客户端。例如,它可以是带有PKCE的
授权代码流(首选)或
资源所有者密码凭据(最容易实现)