Azure 托管标识中的访问令牌的到期时间是多少?

Ash*_*hok 1 azure azure-active-directory

我使用下面的代码生成访问令牌,以使用 AAD 身份验证将我的应用程序代码连接到 Azure SQL。我需要找出这个令牌的到期时间

为了找到过期时间,我尝试了两种方法:

1) 创建一个连接到 Azure SQL 的控制台应用程序并使用 AAD 身份验证执行一些数据操作。连续循环运行此应用程序一个多小时。这里发现令牌在 1 小时后过期

2)创建一个Web应用程序并托管在iisexpress中。在 Web 应用程序中,编写与控制台应用程序中相同的数据访问代码。在一个多小时内多次循环调用Web App url。这里令牌也将在大约一个小时后过期

3) 与第 2 点相同,不同之处在于 Web 应用程序托管在 Azure 中并启用了托管标识。这里令牌在 1 小时后并未过期。

因此,令牌到期时间与进行调用的环境相关联。我需要找出不同场景下令牌的确切到期时间。我找不到任何文档。我发现的只是令牌将缓存在内存中,并在过期时更新。

var provider = new AzureServiceTokenProvider();
string token = provider.GetAccessTokenAsync("https://database.windows.net/").Result;

SqlConnection con = new SqlConnection("connstring");
con.AccessToken = token;
Run Code Online (Sandbox Code Playgroud)

juu*_*nas 6

托管身份访问令牌将在 24 小时后过期。

目前,通过应用程序身份验证库获取的令牌会在距离过期不到 5 分钟时刷新。因此,在默认情况下,它会将令牌缓存 23 小时 55 分钟。

您可以在此处查看库定义过期时间的位置:https://github.com/Azure/azure-sdk-for-net/blob/e3bc748ea19040f9f18375aa907246f5b8b882a7/src/SdkCommon/AppAuthentication/Azure.Services.AppAuthentication/AppAuthenticationResult.cs# L40-L44

您应始终缓存令牌,直到剩余时间少于 5 分钟,因为托管身份端点本身会缓存令牌,直到该时间为止。如果您在剩余时间超过 5 分钟时尝试获取新令牌,您将只会得到相同的令牌。