如何从 ADFS 服务器获取 SAML 令牌以在 c# 中从动态 CRM on-premises (non-sdk) 中提取数据?

How to get a SAML token from ADFS sever to pull data from dynamics CRM on-premises (non-sdk) in c#?

我试图从 ADFS 获取 SAML 令牌以从 on-premises CRM (non-sdk) 提取数据,但我不知道如何......我想我需要制作一个 SOAP使用 postasync 方法向 ADFS 请求获取 SAML 令牌,然后我想我需要将令牌放入 http header 中,如下所示,以便从 CRM 中提取数据。

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", TOKEN);

https://docs.microsoft.com/en-us/previous-versions/dynamicscrm-2016/developers-guide/gg327838(v=crm.8)

https://community.dynamics.com/crm/f/microsoft-dynamics-crm-forum/255985/crm2016-afds-authentication

https://gist.github.com/jlattimer/7b0ee146badfc57fc9c9

我已经阅读了上面的三个 link(以及其他内容),并尝试了它们,但前两个似乎只适用于 sdk,而不适用于 non-sdk。 而且,github 的东西对我也不起作用。我想知道是否有另一种方法来生成 SOAP 请求,而不是像第三个 link.

那样输入所有内容

有两种方法,我知道。 在这两种方式中,您都需要将您的应用程序作为 RPT 添加到 ADFS。 检查这个:https://docs.microsoft.com/ru-ru/windows-server/identity/ad-fs/operations/create-a-relying-party-trust 不要忘记启用 saml 协议并设置断言消费者端点。

解决方法一:

只需将所有未经授权的用户重定向到 https://your.adfs.instance/adfs/ls/IDpInitiatedSignon.aspx 他们将提供凭据,然后将被要求选择要重定向的应用程序。如果您将在 url 中使用中继状态指定应用程序,则别无选择。之后,ADFS 将向为 RPT 指定的端点发送 SAML 响应。如果您使用 .NET,则可以使用 WS-Fed 模块,它将自动执行此数据流。

方案二:

您可以在后端执行相同的操作。 这是 .NET 的实现: https://blogs.msdn.microsoft.com/rodneyviana/2014/04/21/how-to-get-a-saml-protocol-response-from-adfs-using-c/

此外,您可以直接调用 ADFS,它更加原生,但我不保证它是 SAML 令牌。这是示例:Authentication in C# with Active Directory

更新。我又看了一遍你的问题,但不确定这是不是你需要的。

ADFS 是身份提供者 (IDP) 并实现:

  • OpenID 连接
  • WS-美联储
  • SAML

您的客户端必须实现这三个协议之一。

您不能使用 SOAP。

对于 OpenID Connect (OIDC),您可以使用 REST API,但这会给您 JWT,而不是 SAML 令牌。

通过 OIDC 获得访问令牌后,按照您的描述将其添加为 ("Bearer", TOKEN)。

overview and samples.