如何快取驗證權杖

本文示範如何快取驗證權杖,以改善應用程式的效能。

使用 ASP.NET

匯入用來取得權杖的 Microsoft.Identity.Client NuGet 套件。

建立機密用戶端應用程式屬性。

private IConfidentialClientApplication _confidentialClientApplication;
private IConfidentialClientApplication ConfidentialClientApplication
{
    get {
        if (_confidentialClientApplication == null) {
            _confidentialClientApplication = ConfidentialClientApplicationBuilder.Create(ClientId)
            .WithClientSecret(ClientSecret)
            .WithAuthority($"https://login.windows.net/{TenantId}")
            .Build();
        }

        return _confidentialClientApplication;
    }
}

接下來,使用下列程式碼來取得 AuthenticationResult,並使用您在建立沈浸式閱讀程式資源時取得的驗證值。

重要

Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 套件和 Azure AD 驗證程式庫 (ADAL) 已被取代。 自 2020 年 6 月 30 日起,未新增任何新功能。 強烈建議您升級,如需取得詳細資料,請參閱移轉指南

public async Task<string> GetTokenAsync()
{
    const string resource = "https://cognitiveservices.azure.com/";

    var authResult = await ConfidentialClientApplication.AcquireTokenForClient(
        new[] { $"{resource}/.default" })
        .ExecuteAsync()
        .ConfigureAwait(false);

    return authResult.AccessToken;
}

AuthenticationResult 物件具有 AccessToken 屬性,這是您在使用 SDK 啟動沈浸式閱讀程式時將使用的實際權杖。 其也有 ExpiresOn 屬性,表示權杖何時到期。 啟動沈浸式閱讀程式之前,您可以檢查權杖是否已過期,而且只有在權杖已過期時才取得新的權杖。

使用 Node.js

request npm 套件新增至您的專案。 使用下列程式碼來取得權杖,並使用您在建立沈浸式閱讀程式資源時取得的驗證值。

router.get('/token', function(req, res) {
    request.post(
        {
            headers: { 'content-type': 'application/x-www-form-urlencoded' },
            url: `https://login.windows.net/${TENANT_ID}/oauth2/token`,
            form: {
                grant_type: 'client_credentials',
                client_id: CLIENT_ID,
                client_secret: CLIENT_SECRET,
                resource: 'https://cognitiveservices.azure.com/'
            }
        },
        function(err, resp, json) {
            const result = JSON.parse(json);
            return res.send({
                access_token: result.access_token,
                expires_on: result.expires_on
            });
        }
    );
});

expires_on 屬性是權杖到期的日期和時間,以自 1970 年 1 月 1 日 (UTC) 算起的秒數表示。 請先使用此值來判斷權杖是否已過期,再嘗試取得新的權杖。

async function getToken() {
    if (Date.now() / 1000 > CREDENTIALS.expires_on) {
        CREDENTIALS = await refreshCredentials();
    }
    return CREDENTIALS.access_token;
}

後續步驟