Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CRM Web Api ADFS OAuth_Oauth_Dynamics Crm_Adfs - Fatal编程技术网

CRM Web Api ADFS OAuth

CRM Web Api ADFS OAuth,oauth,dynamics-crm,adfs,Oauth,Dynamics Crm,Adfs,我们有一个Azure托管的Dynamics 2016“本地”实例,作为IFD使用ADFS身份验证运行。我们现在需要一个Azure托管API来使用CRM Web API与Dynamics实例通信。为了实现这一点,我们需要使用OAuth身份验证,如本文所述,使用ADAL,使用Microsoft.IdentityModel.Clients.ActiveDirectory库进行身份验证。我们有以下代码从ADFS检索令牌 var resource = "https://reosurce.com/"; va

我们有一个Azure托管的Dynamics 2016“本地”实例,作为IFD使用ADFS身份验证运行。我们现在需要一个Azure托管API来使用CRM Web API与Dynamics实例通信。为了实现这一点,我们需要使用OAuth身份验证,如本文所述,使用ADAL,使用Microsoft.IdentityModel.Clients.ActiveDirectory库进行身份验证。我们有以下代码从ADFS检索令牌

var resource = "https://reosurce.com/";
var clientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var authProvider = "https://adfs.server.com/adfs/oauth2/token";
var redirectUri = "https://crm2Environment.com/";

var authContext = new AuthenticationContext(authProvider, false);
var authToken = authContext.AcquireTokenAsync(resource, clientId, new 
Uri(redirectUri), new PlatformParameters(PromptBehavior.Always)). 
Result.AccessToken;
代码示例成功运行,但是用于交互流情况,并且一旦出现AcquireTokenAsync方法调用登录对话框(ADFS如何知道其是否可以进行身份验证),然而,这显然不适用于域不可知的API,也无法将凭据传递给ADF(我们无论如何也不希望这样)。AcquireTokenAsync方法的替代重载似乎都不适用于上述情况下的ADF(但可以接受建议)。我们错过什么了吗?是否有其他方法可以通过非交互流/不使用域帐户身份验证来检索令牌?请记住,Azure AD可用的示例在ADFS场景中似乎不起作用,而且我们不拥有或无权访问当前的ADSF服务器,因为这是由我们的基础架构团队管理的(尽管如果要求他们对ADFS进行更改,这是可能的)

请查看MSI(托管服务标识)。这是Azure到Azure服务的新通信协议


在研究此问题时,请尽量不要与旧模式混淆(此模式仍然适用于Service-to-AzureService通信)。在这里,您可以在Azure上生成授予权限的ClientId/ClientSecret/Url,然后与需要访问的应用程序共享这些值。下面是一个示例该示例演示如何连接到Azure Key Vault,但它可以是任何使用Azure Active Directory身份验证的Azure服务。

您使用的是哪一版本的ADFS

如果ADFS 4.0和流是服务器到服务器(听起来像是)的,则使用客户端凭据,该凭据使用密钥知识-无登录/密码


良好的链接。

其ADFS 3.0在Windows Server 2012上运行,很抱歉-ADFS 3.0中不支持该流。Azure到Azure服务在这种情况下没有帮助,因为CRM是内部部署的,并且是通过ADFS进行IFD的