다음을 통해 공유


인증 토큰을 캐시하는 방법

이 문서에서는 애플리케이션의 성능을 향상시키기 위해 인증 토큰을 캐시하는 방법을 보여 줍니다.

ASP.NET 사용

토큰을 Microsoft.Identity.Client 획득하는 데 사용되는 NuGet 패키지를 가져옵니다. 자세한 내용은 ID 클라이언트 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를 획득합니다.

Important

Microsoft.IdentityModel.Clients.ActiveDirectory NuGet 패키지 및 ADAL(Azure AD 인증 라이브러리)은 더 이상 사용되지 않습니다. 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 SDK를 AccessToken 사용하여 몰입형 리더 시작할 때 사용하는 실제 토큰인 속성이 있습니다. 토큰이 만료되는 시점을 나타내는 속성도 ExpiresOn 있습니다. 몰입형 리더 시작하기 전에 토큰이 만료되었는지 여부를 검사 만료된 경우에만 새 토큰을 획득할 수 있습니다.

Node.JS 사용

프로젝트에 요청 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;
}

다음 단계