認証トークンをキャッシュする方法
この記事では、アプリケーションのパフォーマンスを高めるために認証トークンをキャッシュする方法について説明します。
ASP.NET を使用する
トークンの取得に使用される Microsoft.Identity.Client
NuGet パッケージをインポートします。 詳細については、「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 を使用して Immersive Reader を起動する際に実際に使用することになるトークンです。 また、トークンの有効期限を示す ExpiresOn
プロパティもあります。 Immersive Reader を起動する前に、トークンの有効期限が切れているかどうかを調べ、切れている場合にのみ新しいトークンを取得することができます。
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;
}