验证动态 CRM 插件以访问 Web API 2 种方法

Authenticating dynamics CRM plugin to access Web API 2 methods

我在 Dynamics CRM 中编写了一个插件。此插件访问部署在 Azure 云中的一些 Web API 2 方法(通过 HTTPS)。当 CRM 中的联系人数据发生变化时,将触发该插件。许多 CRM 帐户持有人将更新联系人数据。

我将在插件中硬编码一个 'secret key'(一次性生成的 Guid),并在每次访问 Web api 方法时发送此密钥。我将在 Web api 方法中验证此 guid 以防止未经授权的访问。

我不喜欢在源代码中存储密钥 (guid)。

问题

  1. 如果不想 'hard code' 密钥,我有什么选择?
  2. 这种方法有哪些安全漏洞?

备注

一般来说,我的所有 Web API 都通过自定义身份验证 Web api 过滤器进行身份验证,但是从插件访问的 Web API 不属于自定义身份验证。

CRM 版本为 2013

我认为这种方法永远不会安全。

可以从 CRM 中提取插件程序集。然后有人可以拆卸组件并找到 Guid。实际上,您的密码以纯文本形式存储。

至少您可以将用户 name/password/secret 密钥存储在 CRM 记录中。然后可以使用 CRM 安全保护 CRM 记录。

您最好实施身份验证 'normally'。

如前面的答案所述,第一个选项是将您的信息存储在您可以从插件中检索的配置自定义实体中。这些记录将受到 CRM 安全模型的保护,因此如果您的插件在调用用户上下文中是 运行,您将需要确保用户有权阅读该信息(这不是一个好主意)或更改要在管理员用户上下文下执行的插件。

另一种选择是使用 Secure/Unsecure Configuration 这些是您可以在步骤中配置的两个(字符串)参数,您将能够从插件中读取它们。我会说安全配置符合您的要求,但请看一下。您还可以轻松找到实现方法 (example)。

我能想到的第三个也是最后一个选项是创建一个 XML WebResource 并从插件中读取它。同样,您需要确保插件下的用户上下文 运行 可以访问它。