我们对Active Directory下的电子邮件地址使用强制性双因素身份验证。
我有一个需要服务帐户的应用,因此我们为该服务帐户创建了应用密码。我们使用以下终点获取访问令牌 -
https://login.windows.net/{tenant_id}/oauth2/token
对于凭据没有双重身份验证和普通密码,它完全正常,但对于具有双因素身份验证和应用密码的帐户
则无效如果我们输入应用密码,则会返回此错误 -
我怎样才能让它发挥作用?
提前致谢
答案 0 :(得分:1)
看起来您正在尝试使用资源所有者密码凭据授予,in general not recommended(它不支持MFA等) 而不是使用该流程,看看client credential flow(您可以使用应用程序ID +秘密或证书)是否符合您的需求
对于CRM Online,它确实支持“application user”的概念。您在AAD中使用机密或证书声明应用程序。然后,您转到CRM Online并添加具有自定义安全角色的“应用程序用户”。
然后您可以使用这样的代码来访问CRM Web服务。
add-type -path "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
add-type -path "Microsoft.Xrm.Sdk.dll"
$resourceAppIdURI = "https://ORG.crm2.dynamics.com"
$authority = "https://login.windows.net/TENANT.onmicrosoft.com"
$credential=New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential("b1d83e4e-bc77-4919-8791-5408746265c1","<SECRET>")
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority,$false
$authResult = $authContext.AcquireToken($resourceAppIdURI, $credential)
$sdkService=new-object Microsoft.Xrm.Sdk.WebServiceClient.OrganizationWebProxyClient("https://ORG.crm2.dynamics.com/xrmservices/2011/organization.svc/web?SdkClientVersion=8.2",$false)
$sdkService.HeaderToken=$authResult.accesstoken
$OrganizationRequest=new-object Microsoft.Xrm.Sdk.OrganizationRequest
$OrganizationRequest.RequestName="WhoAmI"
$sdkService.Execute($OrganizationRequest)