Azure返回具有无效客户端密钥的有效访问令牌

时间:2017-04-03 23:37:44

标签: azure azure-active-directory

在多线程环境中运行时,即使使用无效密钥,也会返回Azure访问令牌。

我已经进行了集成测试,检查在获取Azure访问令牌时是否无法通过无效的客户端密码。

当单独运行时,测试每次都会通过,这意味着无效的客户端密钥不会返回Azure访问令牌。

但是,当使用其他集成测试(在多个线程上)运行时,即使显然无效的客户机密钥,此函数也会返回访问令牌。

即使在指定完全无效的客户端密码时,我也没有看到任何合法的原因,这将成为客户端ID的缓存令牌。

请注意,当客户端ID无效时,不会发生此行为。

这种行为有解释吗?

    private async Task<string> GetAccessToken(string authority, string resource, string scope)
    {
        var clientCredential = new ClientCredential(clientId, clientSecret);

        var context = new AuthenticationContext(authority, TokenCache.DefaultShared);
        var result = await context.AcquireTokenAsync(resource, clientCredential);

        Debug.WriteLine("----------------------------------");
        Debug.WriteLine(clientId);
        Debug.WriteLine(clientSecret);
        Debug.WriteLine(result.AccessToken);

        return result.AccessToken;
    }

调试输出

Debug Trace:
----------------------------------
<...client id...>
invalid secret
<...valid token...>

1 个答案:

答案 0 :(得分:3)

这是因为您的缓存在缓存中仍然具有有效的访问令牌。 ADAL首先检查缓存,如果仍然有效(未过期)则返回访问令牌。令牌缓存在client_id上作为密钥的一个维度进行转发,因此无效的client_id会按预期失败。要强制库使用密钥并进行网络呼叫,您必须从缓存中删除令牌