Sitecore(サイトコア)のユーザー追跡機能をオフ際に、Entra ID(旧Azure AD)認証エラーに遭ったことはありますでしょうか。
本記事では、そのエラーを解決する方法を紹介します。
エラーについて
Entra ID(旧Azure AD)認証を利用した上で、下記のようなSitecore設定を実施されることにより、エラーが発生します。
<configuration xmlns:patcch="http://www.sitecore.net/xmlconfig/" xmlns:set="http://www.sitecore.net/xmlconfig/set/">
<sitecore>
<sites>
<!-- 訪問者の同意に基づくWebトラッキング機の有効化または無効化 -->
<site name="mywebsite" set:enableTracking="true" set:explicitConsentForTrackingIsRequired="true" />
</sites>
</sitecore>
</configuration>
<configuration xmlns:patcch="http://www.sitecore.net/xmlconfig/">
<sitecore>
<settings>
<!-- Xdbの無効化 -->
<setting name="Xdb.Enabled" value="false" />
<!-- Webトラッキング機の無効化 -->
<setting name="Xdb.Tracking.Enabled" value="false" />
</settings>
</sitecore>
</configuration>
ログインする際に画面上に表示されるエラー。

Sitecoreログに出力されるエラー。
WARN An error with Nonce cookie occured.
Exception: Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolInvalidNonceException
Message: IDX21323: RequireNonce is 'True'. OpenIdConnectProtocolValidationContext.Nonce was null, OpenIdConnectProtocol.ValidatedIdToken.Payload.Nonce was not null. The nonce cannot be validated. If you don't need to check the nonce, set OpenIdConnectProtocolValidator.RequireNonce to 'false'. Note if a 'nonce' is found it will be evaluated.
Source: Microsoft.IdentityModel.Protocols.OpenIdConnect
場所 Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator.ValidateNonce(OpenIdConnectProtocolValidationContext validationContext) 場所 C:\agent2\_work\56\s\src\Microsoft.IdentityModel.Protocols.OpenIdConnect\OpenIdConnectProtocolValidator.cs:行 639
場所 Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectProtocolValidator.ValidateAuthenticationResponse(OpenIdConnectProtocolValidationContext validationContext) 場所 C:\agent2\_work\56\s\src\Microsoft.IdentityModel.Protocols.OpenIdConnect\OpenIdConnectProtocolValidator.cs:行 264
場所 Microsoft.Owin.Security.OpenIdConnect.OpenIdConnectAuthenticationHandler.<AuthenticateCoreAsync>d__11.MoveNext()
エラーの発生原因
Webトラッキング機能をオフすることにより、ログイン直前に実行するクッキー初期化するパイプラインが止られています。
そのため、ログイン時にクッキーの確認をとれなくなってしまいました。
エラーの解決方法
カスタムプロセス内にOWIN経由でクッキーを強制的に初期化する処理を追加します。
using Microsoft.Owin.Host.SystemWeb;
public class AzureADIdentityProviderProcessor : IdentityProvidersProcessor
{
protected override void ProcessCore(IdentityProvidersArgs args)
{
args.App.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions {
CookieManager = new SystemWebCookieManager()
});
}
}
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。