【问题标题】:REST API authentication in anonymous JavaScript client匿名 JavaScript 客户端中的 REST API 身份验证
【发布时间】:2017-08-08 13:23:12
【问题描述】:

我有一个调用 REST 端点的 JavaScript 客户端(HTML 页面)。我想要某种身份验证。我的问题是任何人都可以查看网页的源代码并查看 JavaScript。如何存储一些秘密/密钥以从 JavaScript 调用 API?

  1. 用户是匿名的。
  2. 网页不是由我们托管,但它允许我们挂钩 JavaScript。我们无法编写服务器端代码。

【问题讨论】:

  • 我知道没有办法做到这一点,你永远不能信任客户端
  • 您要对谁进行身份验证以及针对什么身份提供者进行身份验证?

标签: javascript rest authentication asp.net-web-api oauth


【解决方案1】:

OAuth2 规范通过OAuth2 "implicit grant" 为纯浏览器客户端做出规定。

隐式授权类型用于获取访问令牌(它不支持发布刷新令牌),并针对已知操作特定重定向 URI 的公共客户端进行了优化。这些客户端通常使用 JavaScript 等脚本语言在浏览器中实现。

如果您正在与之交互的服务提供商支持 OAuth2 隐式授权流程 - 您就不用在家了。

它要求客户端标识符(客户端密钥)链接到一个 特定的redirect_uri,这样即使客户端标识符丢失,其他人也无法使用它——因为oauth流总是重定向到相同的URI。

因此,保护​​实际客户端标识符变得不重要,即使它被拦截,其他人也无法使用它来获取访问令牌。

【讨论】:

    【解决方案2】:

    有点安全的方法是将密钥存储在 local-storage / indexeddb .. 中,而不是在 javascript 中对其进行硬编码。

    或者混淆 javascript 代码。 尝试类似的服务

    https://javascriptobfuscator.com

    或任何类似的混淆js代码。

    【讨论】:

    • 我只想指出,这甚至一点都不安全。试图找出密钥/秘密是什么的人或机器人不会从上到下阅读混淆代码,而只会查看实际调用网络操作的代码(例如通过开发人员工具的网络选项卡),然后找到立即获得密钥/秘密。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2016-01-31
    • 2012-05-30
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多