1733907532
2024-12-09 13:07:00
Opti ID は、Optimizely One スイートへのアクセスに革命をもたらし、現在、私が構築するすべての PAAS CMS Web サイトで優先される認証方法です。 ただし、常に注意が必要な注意点がいくつかあります。両方の解決策を以下に概説します。
安全なクッキー
Web サイトで実行する侵入テストでは、Cookie が Secure、HTTP Only、SameSite モード Strict に設定されていることが常に通知されます。 これらの設定は、Opti ID Cookie がサードパーティのものであるため、SameSite モードの None が必要であることがわかるまでは非常に簡単です。 CMS の認証方法として Microsoft Entra (旧称 Azure AD) を使用したことがある場合、この問題はよく知られているでしょう。
私たちが抱えている課題は次のとおりです。
- すべての Cookie の SameSite モードを None にする必要はありません。
- Optimizely Cookie は当社が直接管理するものではありません
- どこにでも冗長なカスタム Cookie コードを記述するのは面倒です
次のソリューションでは、app.UseCookiePolicy(…) メソッドを使用して、すべての Cookie をセキュア、HTTP のみに設定し、デフォルトの SameSite モードはデフォルトで None に設定されています。 次に、次の Cookie 名パターンのいずれかに一致しない場合に、Cookie が Strict の SameSite モードを使用するように設定する OnAppendCookie イベントのハンドラーを提供します。
- オイド- : これらは、Opti ID が認証に使用する Cookie です。
- .AspNetCore : これらは、NET Core が認証に使用する Cookie です。
public static IApplicationBuilder UseSecureCookies(this IApplicationBuilder app)
{
// Set the default cookie policy
app.UseCookiePolicy(new CookiePolicyOptions
{
HttpOnly = HttpOnlyPolicy.Always,
Secure = CookieSecurePolicy.Always,
MinimumSameSitePolicy = SameSiteMode.None,
OnAppendCookie = context =>
{
if (!context.CookieName.StartsWith("oid-") &&
!context.CookieName.StartsWith(".AspNetCore"))
{
// Any cookie that is not an authentication cookie should have a SameSite mode of Strict
context.CookieOptions.SameSite = SameSiteMode.Strict;
}
}
});
return app;
}
Opti ID を使用するためのアドオンの構成
Optimizely CMS 11 では、依存関係の設定は 初期化モジュール。 CMS 12 と .NET Core では、これらすべてが次のように処理されます。 スタートアップ.cs。一般的に使用されるアドオンの中には、startup.cs 内で使用することを目的としたサービス拡張機能が含まれているものもあります。機能を必要とするユーザーに CMS への完全な管理者アクセスを付与するのではなく、特定のロールへのアドオンへのアクセスをカスタマイズできるように、カスタム承認ポリシーを提供するところまで行っている人もいます。以下に、使用する可能性のあるいくつかのアドオンと役割を示します。
- Stott セキュリティ – CmsAdmins、SecurityAdmins、DataAnalytics
- Stott ロボット ハンドラー – CmsAdmins、SeoAdmins
- NotFound ハンドラーの機能 – CmsAdmins、SeoAdmins
- 機能サイトマップ – CmsAdmins、SeoAdmins
ここに課題があります。これらのモジュールは、Opti ID を使用する場合、指定しない限りアクセスできません。 Opti ID スキーム名 各アドオンの認可ポリシーで。
この構成を次の目的に使用します。 Stott セキュリティ アドオン 例として;このアドオンを使用すると、アドオンのデータを別のデータベースにセグメント化し、承認ポリシーを定義できるようになります。 このシナリオでは、Opti ID スキーム名がポリシーに追加されていることを確認するだけです。
public static IServiceCollection AddSecurityAddOn(this IServiceCollection services)
{
services.AddStottSecurity(
options =>
{
options.ConnectionStringName = "EPiServerDB";
},
authorization =>
{
authorization.AddPolicy(CspConstants.AuthorizationPolicy, policy =>
{
// Use the Opti ID scheme Name
policy.AddAuthenticationSchemes(OptimizelyIdentityDefaults.SchemeName);
policy.RequireRole(Roles.CmsAdmins, "SecurityAdmins");
});
});
return services;
}
サービスコレクション拡張パターン
上記の両方の例では、次に従っています。 サービスコレクション拡張パターン。 このパターンを強くお勧めします。これにより、構成コードをモジュール化して、startup.cs をクリーンで理解しやすく、または再配置しやすい状態に保つことができます。
2024 年 12 月 9 日
#安全な #Cookie #とサードパーティのアドオンを使用した #Opti