繁体   English   中英

如何从 ADFS 服务器获取 SAML 令牌以从 C# 中的动态 CRM 本地(非 sdk)中提取数据?

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

我试图从 ADFS 获取 SAML 令牌以从本地 CRM(非 sdk)中提取数据,但我不知道如何..我想我需要向 ADFS 发出 SOAP 请求以通过以下方式获取 SAML 令牌使用 postasync 方法,然后我想我需要将令牌放在像下面这样的 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 请求,而不是像在第三个链接中那样输入所有内容。

有两种方法,我知道。 在这两种方式中,您都需要将您的应用程序作为 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 令牌。 这是示例: C# 中的身份验证与 Active Directory

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

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

  • OpenID 连接
  • WS-Fed
  • 安全反洗钱

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

您不能使用 SOAP。

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

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

很好的概述示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM