Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use ConfigurationManager? (Microsoft.IdentityModel.Protocols)

I was recently forced to update my System.IdentityModel.Tokens.Jwt NuGet package to 5.1.4 because of another NuGet package. Most of the code after changes seem easy enough to solve, but now ConfigurationManager<OpenIdConnectConfiguration>() takes two arguments instead of one! I can not find any example of how to use this new version of the Configuration manager!

I use it as part of this code:

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;

Can anyone let me know what arguments ConfigurationManager expects

like image 664
Jeppe Avatar asked Aug 04 '17 07:08

Jeppe


2 Answers

I found that in order to make ConfigurationManager work with version >=5.1.4 of the System.IdentityModel.Tokens.Jwt NuGet package you have to add OpenIdConnectConfigurationRetriever() as the second argument.

The correct invocation of ConfigurationManager is then:

ConfigurationManager<OpenIdConnectConfiguration> configManager = new ConfigurationManager<OpenIdConnectConfiguration>(stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
like image 126
Jeppe Avatar answered Sep 30 '22 19:09

Jeppe


Depending on what you want to do, you could just change the code to make a call to the Configuration retriever, like this:

        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
                }
        });
like image 32
Diego Mendes Avatar answered Sep 30 '22 17:09

Diego Mendes