【问题标题】:Is it possible to put microsoft-graph client secret into source code?是否可以将 microsoft-graph 客户端密码放入源代码中?
【发布时间】:2018-09-21 15:15:23
【问题描述】:

我有一个 javascript 电子应用程序 (https://github.com/damien122/cloudnoter),它应该连接到 Microsoft 图形后端并提供对 OneNote 笔记本的访问。 以前它工作得很好,但微软改变了 API,我现在应该调整我的应用程序。 以前可以在不使用客户端密钥的情况下通过代码获取 Bearer 令牌,但现在我应该使用客户端密钥和我的问题:

是否建议将客户端密码放入源代码中?并将其发布在 GitHub 上。有人可以用客户端 ID 和客户端密码做什么?我应该保持客户秘密真的“秘密”吗?我可以向我的应用提供客户端机密并保密吗?

在 m.s. 的应用注册服务中我将该应用程序注册为 Web 应用程序,因为这是为我获取身份验证的唯一方法。如果没有客户端密码,我找不到如何对 Web 应用程序进行身份验证的方法。并且找不到如何使用 javascript 注册“Nativ/Mobile App”的方法。 顺便说一句,我使用这个文档 -> https://developer.microsoft.com/en-us/graph/docs/concepts/auth_v2_user

【问题讨论】:

  • “隐式身份验证”流程(来自您的屏幕截图)不应要求保密,除非 Microsoft 不符合 OAuth2。
  • 您也不应该能够使用隐式身份验证进行刷新。您是否有可能使用了“错误”的 oauth 流程?
  • 在文档中还写道,只有在使用 webapp 时才需要密钥。我的应用程序就是这种情况。你指的是哪个流?
  • 我首先使用流程请求授权代码,然后使用该代码我应该请求不记名令牌。第二步需要客户端密码,否则我从后端收到授权错误。
  • 那是授权码授权,而不是隐式授权(这是你想要的)。您应该将 Implicit 与本机应用程序一起使用(或使用来自您自己的后端服务器的 Auth Code 来代理对 Graph 的调用)。此外,答案是明确的不。你应该永远将你的秘密告诉客户。

标签: javascript oauth electron azure-active-directory microsoft-graph-api


【解决方案1】:

对于授权流程,请按照@Event 和@Marc 的建议进行检查。

还有其他问题。

是否建议将客户端密码放入源代码中?和 也可以在 GitHub 上发布。

用户可以使用客户端 ID 和客户端密码做什么?

使用客户端 ID 和客户端密码,有人可能会调用您数据存储中的资源。但某些情况下我们还需要在请求中传递应用名称。

我应该保持客户秘密真的“秘密”吗?

是的

我可以向我的应用提供客户端密码并保密吗?

是的。您可以使用 Azure KeyValut 来保护您的秘密。或者直接关注下面的博客:

https://medium.com/poka-techblog/the-best-way-to-store-secrets-in-your-app-is-not-to-store-secrets-in-your-app-308a6807d3ed

在环境中存储机密

stripe_api_key = os.environ["STRIPE_API_KEY"]

在数据库中存储机密
使用机密同步服务

在您的代码中存储秘密……但已加密

【讨论】:

  • 感谢您的回复。这听起来像我在寻找什么。您是否有一个链接,其中包含有关如何提供客户端机密并对其保密的更多信息?
  • 更新我的答案。基本上不要直接在代码中提供秘钥。
  • 感谢您的快速响应。首先我会尝试隐式授权,如果这不起作用,我会尝试你的解决方案。但主要是你回答我的问题,谢谢。
猜你喜欢
  • 2017-11-28
  • 1970-01-01
  • 2019-08-18
  • 2021-05-18
  • 1970-01-01
  • 2020-09-03
  • 2022-10-13
  • 1970-01-01
  • 2021-07-18
相关资源
最近更新 更多