Jak buforować token uwierzytelniania

W tym artykule pokazano, jak buforować token uwierzytelniania w celu zwiększenia wydajności aplikacji.

Korzystanie z ASP.NET

Zaimportuj Microsoft.Identity.Client pakiet NuGet, który jest używany do uzyskiwania tokenu. Aby uzyskać szczegółowe informacje, zobacz Instalowanie pakietu NuGet klienta tożsamości.

Utwórz właściwość poufnej aplikacji klienckiej.

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;
    }
}

Następnie użyj następującego kodu, aby uzyskać AuthenticationResultobiekt przy użyciu wartości uwierzytelniania uzyskanych podczas tworzenia zasobu Czytnik immersyjny.

Ważne

Pakiet NuGet Microsoft.IdentityModel.Clients.ActiveDirectory i biblioteka ADAL (Azure AD Authentication Library) zostały wycofane. Od 30 czerwca 2020 r. nie dodano żadnych nowych funkcji. Zdecydowanie zachęcamy do uaktualnienia. Aby dowiedzieć się więcej, zobacz przewodnik migracji.

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;
}

Obiekt AuthenticationResult ma właściwość, która jest rzeczywistym tokenem AccessToken używanym podczas uruchamiania Czytnik immersyjny przy użyciu zestawu SDK. Ma ExpiresOn również właściwość, która określa, kiedy token wygaśnie. Przed uruchomieniem Czytnik immersyjny możesz sprawdzić, czy token wygasł, i uzyskać nowy token tylko wtedy, gdy wygasł.

Korzystanie z Node.JS

Dodaj pakiet npm żądania do projektu. Użyj następującego kodu, aby uzyskać token przy użyciu wartości uwierzytelniania uzyskanych podczas tworzenia zasobu Czytnik immersyjny.

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
            });
        }
    );
});

Właściwość expires_on to data i godzina wygaśnięcia tokenu, wyrażona jako liczba sekund od 1 stycznia 1970 utc. Użyj tej wartości, aby określić, czy token wygasł przed podjęciem próby uzyskania nowego tokenu.

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

Następny krok