【问题标题】:How to get a SAML token from ADFS sever to pull data from dynamics CRM on-premises (non-sdk) in c#?如何从 ADFS 服务器获取 SAML 令牌以从 c# 中的动态 CRM 本地(非 SDK)中提取数据?
【发布时间】:2019-08-04 02:49:13
【问题描述】:

我已尝试从 ADFS 获取 SAML 令牌以从本地 CRM(非 sdk)中提取数据,但我不知道如何......我想我需要向 ADFS 发出 SOAP 请求以获取通过使用 postasync 方法的 SAML 令牌,然后我认为我需要将令牌放在如下的 http 标头中以从 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

我已经阅读了上面的三个链接(以及其他内容),并尝试了它们,但前两个似乎只适用于 sdk,而不适用于非 sdk。 而且,github 的东西也不适合我。我想知道是否有另一种方法来生成 SOAP 请求,而不是像在第三个链接中那样输入所有内容。

【问题讨论】:

标签: c# dynamics-crm saml adfs


【解决方案1】:

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

  • OpenID 连接
  • WS-Fed
  • SAML

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

您不能使用 SOAP。

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

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

好的overviewsamples

【讨论】:

    【解决方案2】:

    我知道有两种方法。 在这两种方式中,您都需要将您的应用程序作为 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 会将 SAML 响应发送到为 RPT 指定的端点。如果您使用 .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

    UPD。我再次阅读了您的问题,但不确定这是否是您所需要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多