1761753720
2025-10-20 15:09:00
開発環境で OpenID 認証をセットアップするのは、特にアイデンティティ サーバーに公的にアクセスできない場合や、クライアントの構成を待機している場合に困難を伴う場合があります。
これを解決するために、私たちは ローカル認証方式 これは OpenID のように動作しますが、ネットワーク接続や外部セットアップは必要ありません。これにより、開発者は事前定義されたロールを持つ偽のユーザーとして即座にサインインできるため、ローカル テストやリモート開発に最適です。
簡略化した実装は次のとおりです。
// usings
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using System.Security.Claims;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
internal class LocalAuthenticationSchemeOptions : AuthenticationSchemeOptions { }
internal class LocalAuthenticationSchemeHandler(
IOptionsMonitor options,
ILoggerFactory logger,
UrlEncoder encoder)
: AuthenticationHandler(options, logger, encoder)
{
protected override async Task HandleAuthenticateAsync()
{
var claims = new[]
{
// add any claim you need, these are for Optimizely CMS
new Claim(ClaimTypes.Role, "Admins"),
new Claim(ClaimTypes.Role, "CmsAdmins"),
new Claim(ClaimTypes.Role, "CmsEditors"),
new Claim(ClaimTypes.Name, "John Doe")
};
var principal = new ClaimsPrincipal(new ClaimsIdentity(claims, "Local"));
var ticket = new AuthenticationTicket(principal, Scheme.Name);
return await Task.FromResult(AuthenticateResult.Success(ticket));
}
}
Optimizely の場合は、追加されたクレームがアプリ設定の構成に対応していることを確認する必要があります。以下を参照してください。 https://docs.developers.optimizely.com/content-management-system/docs/virtual-roles。
そして、起動時に条件付きで接続します。
if (environment.IsDevelopment())
{
services.AddAuthentication("LocalAuthentication")
.AddScheme(
"LocalAuthentication",
opts => { });
}
else
{
// Your OpenID-implementation, may be services.AddAuthentication...
services.AddOpenIdServicesConfiguration(configuration, logger);
}
この設定は次のことを意味します。
-
ローカルの開発者は即座にログインできます、OpenIDなし。
-
ユーザー ID とロールを完全に制御 — 任意の役割としてテストします。
-
外部サーバーに依存しない、リモート/オフライン開発が可能になります。
-
生産は引き続き安全です、ハンドラーは でのみアクティブになるため、
Developmentモード。
これは小さな追加ですが、開発中の認証ワークフローが大幅に簡素化されます。開発者は、OpenID の構成を待ったり、内部ネットワークにトンネリングしたりする代わりに、機能の構築に直接取り掛かることができます。
#偽の #OpenID #認証ハンドラーを使用してローカル開発を高速化する