首页 文章

CRM Web Api ADFS OAuth

提问于
浏览
2

我们有一个Azure托管的“内部部署”Dynamics 2016实例,作为使用ADFS身份验证的IFD运行 . 我们现在要求Azure托管API使用CRM Web API与Dynamics实例进行通信 . 为实现此目的,我们需要使用ADAL进行身份验证,使用ADAL,如此处所述https://msdn.microsoft.com/en-gb/library/gg327838.aspx,利用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,并且无法将凭据传递给ADFS(不是我们想要的) . 在概述的情况下,AcquireTokenAsync方法的替代重载似乎都不适用于ADFS(但对建议持开放态度) . 我们错过了什么吗?是否有另一种方法可以使用非交互流/不使用域帐户身份验证来检索令牌?请记住,Azure AD可用的示例似乎不适用于ADFS方案,我们也不拥有或无权访问当前的ADSF服务器,因为这是由我们的基础架构团队管理的(尽管如果需要它们可以在ADFS上进行更改)

2 回答

  • 0

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

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

    好的链接here .

  • 1

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

    Managed Service Identity (MSI) for Azure resources

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

相关问题