Azure Active Directory错误 - 由于未在缓存中找到令牌,因此无法以静默方式获取令牌。调用方法AcquireToken

时间:2017-05-25 23:08:53

标签: oauth-2.0 azure-active-directory

我在最近4个小时内一直在努力解决这四行代码中出现的问题:

            string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
            var authContext = new Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext(Startup.authority, new NaiveSessionCache(userObjectID));
            var credential = new Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential(Startup.clientId, "SECRET_VALUE");
            var result = await authContext.AcquireTokenSilentAsync("https://MyDomain.onmicrosoft.com/TaskWebAPI", credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
  • 1号线不会导致任何问题。
  • 第2行 - 只有一个值。 Startup.authority是https://login.microsoftonline.com/myTenantName
  • 行号3- ClientId是我的Web应用程序客户端ID。代替SECRETVALUE是我在密钥部分生成的关键之一'为我的WebAPP。
  • LIne no 4-有资源AppId Key

如果你们中的任何人帮我调试这四行,那将是一个很好的帮助。

1 个答案:

答案 0 :(得分:0)

AcquireTokenSilentAsync(...)尝试在不显示任何UI的情况下为您提供令牌,如果无法显示,则会失败。它通过在令牌缓存中查找有效令牌来执行此操作,并在必要时刷新令牌。这里的操作是捕获AdalException并使用acquireToken调用重试。

catch (AdalException e) { 
    if (e.ErrorCode == "failed_to_acquire_token_silently") {
        // Do an AcquireToken call 
    }
}

Here's AcquireToken的所有不同重载。