活动目录和基于声明的身份验证
发布日期: 2017年1月
适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2016,Dynamics CRM Online
基于声明的身份验证可提供用于验证主计算机上用户的行业标准安全协议。 基于声明的身份验证是一组 WS-* 标准,描述如何在被动模式(WS-Federation 和 Microsoft Dynamics 365(在线或本地) Web 应用程序一起使用时)或主动模式(WS-Trust 和 Windows Communication Foundation (WCF) 客户端一起使用时)中使用安全声明标记语言 (SAML) 令牌。 该身份验证与 WCF 协同,提供安全的用户身份验证以及与 Microsoft Dynamics 365 服务器的通信通道。 所有 Microsoft Dynamics 365 版本都支持基于声明的身份验证。
基于声明的身份验证需要使用在服务器上运行的 安全令牌服务 (STS)。 STS 服务器可以基于 Active Directory 联合身份验证服务 (AD FS) V2,也可以基于提供正式 STS 协议的任何平台。 有关详细信息,请参阅 Dynamics 365 部署和管理文档中的以下主题:TechNet:配置 Microsoft Dynamics CRM 2015 的 IFD。
本主题内容
支持的身份验证方案
不受支持的身份验证方案
身份验证类别
使用客户端代理类进行身份验证
处理通道异常和错误
有关安全 (SAML) 令牌的其他信息
支持的身份验证方案
Microsoft Dynamics 365 针对每种部署类型支持的身份验证方案如下所示。
部署 |
身份验证模型 |
---|---|
Microsoft Dynamics 365 (online) |
基于声明的或 Active Directory(通过联合)身份验证 |
Microsoft Dynamics 365 内部部署 |
基于声明的身份验证或 Active Directory 身份验证 |
Microsoft Dynamics 365面向 Internet 的部署(IFD) |
基于声明的身份验证或 Active Directory 身份验证 |
基于声明的身份验证的工作原理
将对用户进行身份验证的请求从 Microsoft Dynamics 365 或 Microsoft Dynamics 365 (online) 或者自定义应用程序发送到 STS 服务器。 STS 服务器会确定是否应该对用户进行身份验证,如果需要,则会颁发一个包含用户身份验证信息的已签名并加密的 SAML 令牌。 该令牌的生命周期有限,根据应用程序使用令牌的时间长短,可能必须定期刷新令牌。 本主题后面将更详细地讨论令牌。
Active Directory 身份验证的工作原理
将对用户进行身份验证的请求从 Microsoft Dynamics 365 或自定义应用程序发送到 Active Directory。 WCF 堆栈会为来自应用程序的组织服务调用管理身份验证过程,而 Internet Information Services (IIS) 会为 Web 应用程序管理身份验证。
不受支持的身份验证方案
Microsoft Dynamics 365 SDK 不支持使用客户端证书。 如果将 Microsoft Dynamics 365 网站配置为需要 IIS 客户端证书,则任何使用该 SDK 生成的应用程序的身份验证都将失败。
有关其他不受支持的编程方法的详细信息请参阅 不支持的自定义设置。
身份验证类别
下表列出 SDK 中的主要可用认证类,在使用时进行描述,并且提供链接给另外的相关的文献。
类 |
使用情况 |
相关文档 |
---|---|---|
IServiceConfiguration<TService>、IServiceManagement<TService> |
所有部署类型:内部部署/IFD,联机(Microsoft 帐户 和 Office 365/MOS*) 多线程应用程序的最佳选择 |
利用 Microsoft Dynamics 365(联机)Web 服务对 Office 365 用户进行身份验证 示例:通过 Microsoft Dynamics 365 Web 服务对用户进行验证 De prestaties bij toewijzing van het servicekanaal verbeteren |
所有部署类型:内部部署/IFD,联机(Microsoft 帐户 和 Office 365/MOS*) |
使用客户端代理类进行身份验证 De prestaties bij toewijzing van het servicekanaal verbeteren |
|
所有部署类型:内部部署/IFD,联机(Microsoft 帐户 和 Office 365/MOS*) |
||
ServerConnection |
所有部署类型:内部部署/IFD,联机(Microsoft 帐户 和 Office 365/MOS*) 控制台测试应用程序和样品代码的用途。 当运行 SDK 样品代码和展示对认证类的用途时,设计改进实用性。 包含控制台输出代码。 |
*Microsoft Online Services 环境
使用客户端代理类进行身份验证
向 Microsoft Dynamics 365 Web 服务进行身份验证的一种方法是在您所编写的应用程序中使用 OrganizationServiceProxy 和 DiscoveryServiceProxy 类。 这些类的四参数构造函数支持 Microsoft Dynamics 365(在线或本地) 部署。 这些代理类会自动处理声明或 Active Directory 身份验证,还会管理对 WCF 通道终结点的资源限制。
以下代码显示如何实例化组织服务代理:
using (OrganizationServiceProxy _serviceProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, userCredentials, deviceCredentials))
以下代码显示如何实例化发现服务代理:
using (DiscoveryServiceProxy _discProxy = new DiscoveryServiceProxy(organizationUri, homeRealmUri, userCredentials, deviceCredentials))
请务必在应用程序终止前正确处理应用程序中的服务代理实例。using 语句可确保在服务代理超出范围时通过对其自动调用 Dispose 来正确处理该服务代理。 但是,为了获得更佳的应用程序性能,最好在整个应用程序会话期间,保持服务代理实例在应用程序中可用,而不是先处理该服务代理,然后再根据需要在应用程序代码的其他位置重新分配它。 创建和验证服务通道会产生昂贵的操作成本(时间成本)。 在这种情况下,在处理服务代理实例后,必须在应用程序终止前直接对代理调用 Dispose 方法。
通过 Microsoft 帐户 身份提供程序,仅在向 Microsoft Dynamics 365 (online) 进行身份验证时使用已注册计算设备的设备凭据。 有关演示如何填充代理构造函数参数的代码示例,请参阅示例:访问发现服务。
重要
对于 Microsoft Dynamics 365 内部部署或面向 Internet 的部署 (IFD) 安装,如果 STS 服务器可用,则客户端代理类会使用基于声明的身份验证。 否则会使用 Active Directory 身份验证。
如果您希望在代码中使用 Microsoft Dynamics 365 以前绑定的实体类型,则必须在实例化组织服务代理之后,执行 Web 服务方法调用之前,添加以下代码行:
_serviceProxy.EnableProxyTypes()
安全性 说明 |
---|
WCF 支持根据需要以交互方式提示用户输入登录凭据的功能。 通过设置 ClientCredentials 类的 SupportInteractive 属性可启用此功能。 这些凭据用于前面代码段中显示的 userCredentials 参数。 当对 Microsoft Dynamics 365 Web 服务调用 SDK 时,此 WCF 功能可独立于您的代码对 SDK 调用所执行的操作和实体数据更改的所有权进行更改。 Microsoft Dynamics 365 处理 Web 服务调用中提供的凭据,如下所示:
|
处理通道异常和错误
您的代码应该捕获以下异常和错误。 有关要捕获的其他异常的列表,请参阅 Microsoft Dynamics 365 SDK 中的 C# 示例:
有关更多信息,请参阅 .NET FrameworkWCF 文档以了解如何处理 WCF 故障和异常。 有关其他代码示例,请参阅使用示例和帮助程序代码。
有关安全 (SAML) 令牌的其他信息
在 SAML 中使用的用户身份验证令牌如下。
SAML 令牌的内容
基于 XML 的 SAML 2.0 令牌包含定义一个或多个用户相关声明的标识。 在基于声明的身份验证中,此令牌在身份提供程序 (STS) 服务器和 Microsoft Dynamics 365 之间进行传递。 标识内声明的定义如下所示。
声明 |
用途 |
---|---|
通用主体名称 (UPN) |
包含目标 Microsoft Dynamics 365 服务器上的用户 ID(格式为域\别名)。 |
名称 |
如果通过身份验证的用户还是 Microsoft Dynamics 365 中的部署管理员,则此声明包含目标 Microsoft Dynamics 365 服务器上的部署管理员 ID(格式为域\别名)。Windows Identity Foundation 将 Name 声明映射到 Identity.name 属性。 |
任何其他声明 |
未用于 Microsoft Dynamics 365。 |
支持的安全令牌类型
Microsoft Dynamics 365(在线或本地) 支持两种类型的 SAML 令牌:
Web 应用程序 - Microsoft Dynamics 365 Web 应用程序从 STS 接收持有者令牌。 此令牌缺少一些必需的信息,因此在访问 WCF 终结点时使用基于传输层安全 (TLS) 或安全套接字层 (SSL)的 URL (https://) 来进行安全保护。
SDK - 自定义应用程序接收带有校验密钥的活动令牌,其中包含必需的信息。
安全令牌的生命周期
SecurityToken 的生命周期用其 ValidFrom 和 ValidTo 属性来标识。 应用程序设计应考虑令牌过期的可能性,在处理来自应用程序的下一个消息请求时,令牌过期将导致 Microsoft Dynamics 365 Web 服务引发 ExpiredSecurityTokenException。
另请参阅
演练:使用 Active Directory 注册 Dynamics 365 应用程序
连接 Microsoft Office 365 和 Microsoft Dynamics 365(联机)
从 ASPX 网页或 IFRAME 实施单一登录
示例:通过 Microsoft Dynamics 365 Web 服务对用户进行验证
Microsoft Dynamics 365
© 2017 Microsoft。 保留所有权利。 版权