認証/承認に関する議論/決定を行うために、ASP.Net Core 2PoCを構築しています。
私は現在、このアプリケーションがサポートしたい新しいOpenIDプロバイダーをユーザーが定義したところです。
これをサポートする1つの方法は、起動時に構成済みのプロバイダーをすべて読み取り、それらをすべてConfigureServices
内で構成することです。しかし、アプリを強制終了して再起動しなくてもこれを実行できるという興味深い手がかりがあります。
IAuthenticationSchemeProvider
には、理想的に見えるAddScheme
メソッドがあります。今私がする必要があるのはAuthenticationScheme
オブジェクトを構築することだけで、私は金色です。コンストラクターAuthenticationScheme(string name, string displayName, Type handlerType)
がありますが、Microsoft.AspNetCore.Authentication.OpenIdConnect
の型を正しく使用してこのオブジェクトを正しく構築し、OpenIDConnect固有のオプションを指定できるようにする方法がわかりません。
3番目のパラメーターに使用したいタイプはOpenIdConnectHandler
だと思います。しかし、私は自分のオプションで何をしますか? (または、代わりに、Action<OpenIdConnectOptions>
デリゲートを提供できるのと同等の方法を実行するにはどうすればよいですか)
私は このgithubの問題 これも興味深い(TryAddScheme
メソッドがないため、例外が発生する可能性があり、このPoCをさらに説得することを選択した場合、抽象的に興味深い)が、小さなサンプルではオプションについてはまったく話しません。
ここにこれを行う方法の例があります- https://github.com/aspnet/AuthSamples/tree/master/samples/DynamicSchemes
OAuthスキームの場合、schemeProvider.AddScheme
とoptionsCache.TryAdd
を呼び出すだけでなく、さらに多くのことを行う必要があることに注意してください。を介してオプションを追加する場合は、「構成後」の手順もあります通常のメソッドです。クラスは次のとおりです--- https://github.com/aspnet/Security/blob/master/src/Microsoft.AspNetCore.Authentication.OAuth/OAuthPostConfigureOptions.cs
したがって、タイプOAuthPostConfigureOptions<OAuthOptions, OAuthHandler<OAuthOptions>>
をDIコンテナーに登録し、コンストラクターを介してそれを取得し、オプションをoptionsCache
に追加する前に、オプションでOAuthPostConfigureOptions.PostConfigure
を呼び出すことができます。
上記の回答を拡張するには( https://stackoverflow.com/a/49825151/220069 )、schemeProvider.AddSchemeとoptionsCache.TryAddに加えて https:// github .com/aspnet/AspNetCore/blob/release/2.2/src/Security/samples/DynamicSchemes/Controllers/AuthController.cs 、Startup.csとAuthController.csにさらに変更を加える必要があります。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
// register to the DI container so it can be injected in the AuthController constructor.
services.AddSingleton<OpenIdConnectPostConfigureOptions>();
...
}
AuthController.cs内
AuthControllerコンストラクターにOpenIdConnectPostConfigureOptions
を挿入します。
public AuthController(IAuthenticationSchemeProvider schemeProvider,
IOptionsMonitorCache<OpenIdConnectOptions> optionsCache,
OpenIdConnectPostConfigureOptions postConfigureOptions)
{
_schemeProvider = schemeProvider;
_optionsCache = optionsCache;
_postConfigureOptions = postConfigureOptions;
}
authController.csのAddOrUpdate
メソッドで、OpenIdConnectOptions
クラスのインスタンスを作成し、構成後の手順でこれを使用します。
var options = new OpenIdConnectOptions
{
Authority = "xxx-endpoint",
CallbackPath = "/signin-oidc",
ClientId = "XXX",
ClientSecret = "XXX",
......
};
_postConfigureOptions.PostConfigure("oidc", options);
_optionsCache.TryAdd("oidc", options);