首页 > 解决方案 > 如何在运行时更改 AzureADOptions

问题描述

我正在尝试在运行时更改 AzureADOptis。我尝试了以下操作,但在此之后,单击登录链接将使用旧值将其重定向到 Microsoft 登录页面。期望是采取更新的选择。

var options = new AzureADOptions
            {
                Instance = "https://login.microsoftonline.com/",
                Domain = "....",
                TenantId = "....",
                ClientId = "....",
                CallbackPath = "/signin-oidc"
            };

            _optionsCache.TryRemove(AzureADDefaults.AuthenticationScheme);
            _optionsCache.TryAdd(AzureADDefaults.AuthenticationScheme, options);

标签: asp.net-core-mvcazure-active-directory

解决方案


您可以使用OpenIdConnectOptionssinceAzureADOptions也将映射到OpenIdConnectOptionsin library 。并且您需要注入 OpenIdConnectPostConfigureOptionsDI 系统并_postConfigureOptions.PostConfigure在之前调用_optionsCache.TryAdd

ConfigureServices.cs

services.AddSingleton<OpenIdConnectPostConfigureOptions>();

在您的控制器中:

private readonly IAuthenticationSchemeProvider _schemeProvider;
private readonly IOptionsMonitorCache<OpenIdConnectOptions> _optionsCache;
private readonly OpenIdConnectPostConfigureOptions _postConfigureOptions;

public HomeController(IAuthenticationSchemeProvider schemeProvider, IOptionsMonitorCache<OpenIdConnectOptions> optionsCache, OpenIdConnectPostConfigureOptions postConfigureOptions)
{

    _schemeProvider = schemeProvider;
    _optionsCache = optionsCache;
    _postConfigureOptions = postConfigureOptions;
}

在你的行动中:

var OIDCoptions = new OpenIdConnectOptions
{                             
    Authority = "https://login.microsoftonline.com/YourTenantID/",              
    ClientId = "YourClientID",
    CallbackPath = "/signin-oidc"
};            
_postConfigureOptions.PostConfigure(AzureADDefaults.OpenIdScheme, OIDCoptions);
_optionsCache.TryRemove(AzureADDefaults.OpenIdScheme);
_optionsCache.TryAdd(AzureADDefaults.OpenIdScheme, OIDCoptions);

推荐阅读