如何使用ConfigurationManager?(Microsoft.IdentityModel.Protocols)

Jep*_*ppe 6 c# configuration openid-connect

由于另一个NuGet包,我最近被迫将我的System.IdentityModel.Tokens.Jwt NuGet包更新到5.1.4.更改后的大多数代码似乎都很容易解决,但现在ConfigurationManager<OpenIdConnectConfiguration>()需要两个参数而不是一个!我找不到如何使用这个新版本的配置管理器的任何示例!

我将它用作此代码的一部分:

string stsDiscoveryEndpoint = string.Format("{0}/.well-known/openid-configuration", authority);

ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, IConfigurationRetriever<>);

OpenIdConnectConfiguration config = await configManager.GetConfigurationAsync();
_issuer = config.Issuer;
_signingTokens = config.SigningTokens.ToList();

_stsMetadataRetrievalTime = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)

任何人都可以让我知道参数的ConfigurationManager预期

Jep*_*ppe 10

我发现为了ConfigurationManager使用System.IdentityModel.Tokens.JwtNuGet包的version> = 5.1.4 进行工作,你必须添加OpenIdConnectConfigurationRetriever()第二个参数.

正确的调用ConfigurationManager是:

ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
Run Code Online (Sandbox Code Playgroud)

  • @cSteusloff 因为这个问题是关于实例化 `ConfigurationManager` 我认为你需要更多的上下文来让你的评论有意义。 (2认同)

Die*_*des 5

根据您想要执行的操作,您只需更改代码即可调用配置检索器,如下所示:

        string issuerEndpoint = "https://my.auth.server";
        var openidConfiguration = await OpenIdConnectConfigurationRetriever.GetAsync(
                    $"{issuerEndpoint}/.well-known/openid-configuration", CancellationToken.None);

        app.UseJwtBearerAuthentication(
        new Microsoft.Owin.Security.Jwt.JwtBearerAuthenticationOptions()
        {
            TokenValidationParameters =
                new TokenValidationParameters
                {
                    ValidIssuer = openidConfiguration.Issuer,
                    ValidateAudience = false,
                    IssuerSigningKeys = openidConfiguration.SigningKeys,
                    IssuerSigningTokens = openidConfiguration.SigningTokens
                }
        });
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“OpenIdConnectConfigurationRetriever.GetAsync()”不会缓存检索到的配置,而“ConfigurationManager&lt;&gt;.GetConfigurationAsync()”则会缓存检索到的配置 (5认同)