【问题标题】:How to securely send clientid and clientsecret without oauth but custom implementation with angular and dotnet如何在没有 oauth 但使用 angular 和 dotnet 自定义实现的情况下安全地发送 clientid 和 clientsecret
【发布时间】:2021-07-06 05:17:10
【问题描述】:

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

我有一个 Angular 应用程序,该应用程序将公开可用,因此无需登录或凭据即可打开网站,并且用户 ID 是从当前登录用户获取的。 jwt 令牌是由 www.mysite.com/subscribe 获取的,方法是在正文中使用来自 Angular 前端的 get 动词传递 clientid 和 clientsecret。

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

如果我将 clientId 和 clientSecret 放入代码中,黑客可以窃取并使用它。

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

前端:角度 后端:点网 我们不使用 oauth 提供程序,因为该应用对用户公开内部

问题:通过 get 正文传递这些 clientid 和 clientsecret。这真的是不安全的。

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

【问题讨论】:

    标签: angular rest .net-core jwt authorization


    【解决方案1】:

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

    您应该实现另一个流而不是Client Credentials Flow,更适合公共客户端。例如,它可能是Authorization Code Flow with PKCE(首选)或Resource Owner Password Credentials(最容易实现)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 1970-01-01
      • 2014-09-03
      • 1970-01-01
      • 2019-10-25
      • 2015-11-09
      • 2020-01-30
      相关资源
      最近更新 更多