CRM Web Api ADFS OAuth

问题描述 投票:2回答:2

我们有一个Azure托管的“内部部署”Dynamics 2016实例,作为使用ADFS身份验证的IFD运行。我们现在要求Azure托管API使用CRM Web API与Dynamics实例进行通信。为实现此目的,我们需要使用ADAL进行身份验证,如此处所述使用ADALxswpoi,使用Microsoft.IdentityModel.Clients.ActiveDirectory库。我们有以下代码从ADFS检索令牌

https://msdn.microsoft.com/en-gb/library/gg327838.aspx

代码示例成功运行,但是用于交互式流程情况,并且一旦调用AcquireTokenAsync方法,就会出现登录对话框(这有意义,因为ADFS知道它是否可以进行身份​​验证),但这显然不会处理与域无关的API,并且无法将凭据传递给ADFS(不是我们想要的)。在概述的情况下,AcquireTokenAsync方法的替代重载似乎都不适用于ADFS(但对建议持开放态度)。我们错过了什么吗?是否有另一种方法可以使用非交互流/不使用域帐户身份验证来检索令牌?请记住,Azure AD可用的示例似乎不适用于ADFS方案,我们也不拥有或无权访问当前的ADSF服务器,因为这是由我们的基础架构团队管理的(尽管如果需要它们可以在ADFS上进行更改)

oauth dynamics-crm adfs
2个回答
1
投票

您使用的是什么版本的ADFS?

如果ADFS 4.0和流是服务器到服务器(听起来像这样),请使用使用密钥知识的客户端凭证 - 没有登录/密码。

良好的链接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;


0
投票

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

here

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

© www.soinside.com 2019 - 2024. All rights reserved.