如何找到所有可能的AdalException.ErrorCode字符串属性值?

时间:2018-10-09 15:29:57

标签: c# azure exception azure-active-directory adal

当您尝试从Azure Active Directory获取令牌时,在令牌获取期间发生错误时会引发异常类型。

该异常称为 AdalException ms docs link here

我追求的属性是 ErrorCode ms docs link here

但是他们称其为“错误代码”,它是一个带有可能值的字符串,例如:

  • 暂时不可用
  • 需要与用户互动
  • 依此类推...

从窥视程序集说

// Parameters:
//   errorCode:
//     The error code returned by the service or generated by client. This is the code
//     you can rely on for exception handling.

您能指出我可以从中获得所有可能值的方向吗?还是它的价值仅仅是信息性的,唯一的或随机的?

我想做的是使用不同的逻辑,所以如果它暂时不可用,可以重试吗?如果还有其他事情,请采取相应措施...

伪代码:

catch (AdalException ex)
{                    
     if (ex.ErrorCode == "temporarily_unavailable")
     {
         retry = true;
         retryCount++;
         Thread.Sleep(3000);
     }
     else if (ex.ErrorCode == "foo")
     // rest of the code omitted for brevity...
}

2 个答案:

答案 0 :(得分:1)

https://docs.microsoft.com/en-us/dotnet/api/microsoft.identitymodel.clients.activedirectory.adalerror?view=azure-dotnet

在左侧层次结构的此链接下,点击AdalError>字段的下拉菜单,它应该显示所有可能性。

答案 1 :(得分:1)

Exceptions in ADAL.NET wiki涵盖了很多此类细节。

要处理的最重要的错误/异常是AdalSilentTokenAcquistionException,其中缓存中的令牌不再有效,需要交互刷新。

我强烈建议您为interaction_required构建一个健壮的错误处理程序(在ADAL.NET中,这是一个AdalClaimsChallengeException,这是由于条件访问策略要求对{ {1}}方法,在这种情况下,如果您可以提示用户,则只需要交互地重复失败的请求即可;如果您的应用无法显示交互,则可以在其中捕获AcquireTokenSilent()参数错误,然后将其发送回客户端以重新授权。