【问题标题】:What is causing the error "Device Certificate was not found for Cert Authorities" in an Azure AD Application?是什么导致 Azure AD 应用程序中出现错误“未找到证书颁发机构的设备证书”?
【发布时间】:2020-01-17 11:13:19
【问题描述】:

我有一个多租户 Azure AD 应用程序。一年多来一直运行良好。假设应用程序由“corp”Azure AD 租户发布。如果我使用“corp”租户的帐户登录应用程序,该应用程序将按预期工作。但是,如果我使用来自其他租户的帐户访问应用程序,则会收到一条错误消息

"未找到证书的设备证书 权威机构:OU=82dbaca4-3e81-46ca-9c73-0950c1eaca97,CN=MS-Organization-Access,DC=windows,DC=net"

我发现this article 看起来与我看到的问题非常相似。我们最近在“corp”Azure AD 租户中启用了条件访问,但不是专门针对此应用程序。我尝试将 ADAL 更新到版本 3.19.2,但错误仍然存​​在。

该应用程序在我的开发环境中使用测试 Azure AD 运行。我认为在我的 Corp AAD 租户的条件访问策略上,ADAL 之间存在某种问题。但是,由于没有特别针对此应用程序的 CA 策略,我什至不确定它为什么会尝试访问设备证书以验证设备是否已在 AAD 中注册。

错误详情

说明:

当前执行过程中发生了未处理的异常 网络请求。请查看堆栈跟踪以获取有关的更多信息 错误及其源自代码的位置。

异常详情:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalException:设备 未找到证书的证书 权威机构:OU=82dbaca4-3e81-46ca-9c73-0950c1eaca97,CN=MS-Organization-Access,DC=windows,DC=net

全栈跟踪:

  [AdalException: Device Certificate was not found for Cert Authorities:OU=82dbaca4-3e81-46ca-9c73-0950c1eaca97,CN=MS-Organization-Access,DC=windows,DC=net]
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Platform.DeviceAuthHelper.FindCertificateByCertAuthorities(IDictionary`2 challengeData, X509Certificate2Collection certCollection) +710
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Platform.DeviceAuthHelper.FindCertificate(IDictionary`2 challengeData) +138
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Platform.<CreateDeviceAuthChallengeResponseAsync>d__2.MoveNext() +144
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Http.<HandleDeviceAuthChallengeAsync>d__25`1.MoveNext() +479
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Http.<GetResponseAsync>d__22`1.MoveNext() +3220
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Http.<GetResponseAsync>d__21`1.MoveNext() +359
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.<SendHttpMessageAsync>d__72.MoveNext() +401
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.<SendTokenRequestAsync>d__69.MoveNext() +415
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.<CheckAndAcquireTokenUsingBrokerAsync>d__59.MoveNext() +605
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.<RunAsync>d__57.MoveNext() +4005
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.<AcquireTokenCommonAsync>d__37.MoveNext() +451
   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() +31
   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) +68
   Microsoft.IdentityModel.Clients.ActiveDirectory.<AcquireTokenAsync>d__0.MoveNext() +313

[AggregateException: One or more errors occurred.]
   System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification) +116
   AvanadeExternalAccess.Utils.AzureADAuthHelper.GetAuthResult() +397
   AvanadeExternalAccess.Utils.InvitationManager.GetUrl(Invitation Invite) +24
   AvanadeExternalAccess.Controllers.HomeController.Index() +616
   lambda_method(Closure , ControllerBase , Object[] ) +87
   System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +1180
   System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +1366
   System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +40
   System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +74
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +43
   System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72
   System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +385
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +43
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +30
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +39
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +52
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +43
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +39
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +649
   System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step) +213
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +131

【问题讨论】:

  • 这个错误发生在哪里?
  • 添加了有关错误的详细信息
  • @AndySchneider:你能解决这个问题吗?
  • @VineetDesai 不,我还是做不到。

标签: azure azure-active-directory adal


【解决方案1】:

只有在 Azure A2 中使用基于设备的条件的资源才会出现该错误。例如,我们有针对 Exchange Online 和 SharePoint Online 的 CA 策略,对于任何位置,设备必须符合或加入混合 Azure-AD。但是,这就是复杂的地方,任何调用应用条件访问的服务/应用程序的资源或应用程序也必须具有相同或更高的 CA 策略,才能将该标头信息传递给您正在访问的资源。那就是详细here

【讨论】:

    【解决方案2】:

    此错误可能意味着用户启用了条件访问并需要加入域的设备。 ADAL 目前不支持此方案。指导是仅使用 MFA 而不需要加入域的设备。 ADAL 不支持 Windows 10 WAM 证书,这将允许加入域的设备和 MFA 进行身份验证。这是在积压。为问题投票here 以帮助评估影响和客户兴趣。

    【讨论】:

      【解决方案3】:

      出现此错误是因为您的 VM 未加入 Azure AD 域。如果它之前工作,然后停止工作,那是因为您的公司实施了一项新政策。

      我在运行 powershell 脚本时遇到了类似的问题。我试图访问 AZ.KeyVaultGet-AzKeyVaultSecret。我在安装本地数据网关时也遇到了问题。

      重要提示:要执行以下步骤,您必须使用 Azure AD 中存在的帐户登录 VM,您可以尝试使用您的个人帐户。如果您使用的是服务帐户,则服务帐户很可能不在 Azure AD 中。

      加入 Azure AD 域

      1. 下载Microsoft Workplace Join
      2. 安装 Workplace_x64.msi
      3. 打开命令提示符(以管理员身份运行),然后键入...
      4. 类型:cd "C:\Program Files\Microsoft Workplace Join"
      5. 类型:AutoWorkplace.exe /i
      6. 当提示 “此设备当前未加入您组织的 Azure AD 域。”,单击加入。如果 VM 已加入“此设备当前是混合 Azure AD,已加入组织的 Azure AD 域,用于 XXXXX”,如果您想离开域,可以单击 离开 .

      再试一次,它应该可以工作。 干杯

      【讨论】:

        猜你喜欢
        • 2014-12-26
        • 1970-01-01
        • 2018-06-19
        • 2012-04-18
        • 2018-10-08
        • 2016-01-01
        • 2011-03-08
        • 1970-01-01
        相关资源
        最近更新 更多