Skip to content

Commit

Permalink
(#188) Use Multiple Authentication Schemes
Browse files Browse the repository at this point in the history
  • Loading branch information
phongnguyend committed May 14, 2023
1 parent a94bfc5 commit dbbffab
Show file tree
Hide file tree
Showing 17 changed files with 356 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Polly;
using System;
using System.Reflection;
Expand Down Expand Up @@ -63,13 +64,30 @@ public void ConfigureServices(IServiceCollection services)
services.AddAuditLogModule(AppSettings);
services.AddHostedServicesAuditLogModule();

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});

services.AddRateLimiter(options =>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;

namespace ClassifiedAds.Services.AuditLog.Grpc;

Expand Down Expand Up @@ -38,13 +39,31 @@ public void ConfigureServices(IServiceCollection services)

services.AddAuditLogModule(AppSettings);

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});

services.AddAuthorization();

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using ClassifiedAds.Infrastructure.Monitoring;
using ClassifiedAds.Infrastructure.Notification;
using ClassifiedAds.Infrastructure.Storages;
using CryptographyHelper.Certificates;

namespace ClassifiedAds.Services.AuditLog.ConfigurationOptions;

Expand Down Expand Up @@ -38,9 +39,22 @@ public class ConnectionStrings

public class IdentityServerAuthentication
{
public string Provider { get; set; }

public string Authority { get; set; }

public string ApiName { get; set; }

public bool RequireHttpsMetadata { get; set; }

public OpenIddictOptions OpenIddict { get; set; }
}

public class OpenIddictOptions
{
public string IssuerUri { get; set; }

public CertificateOption TokenDecryptionCertificate { get; set; }

public CertificateOption IssuerSigningCertificate { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using ClassifiedAds.Infrastructure.Interceptors;
using ClassifiedAds.Infrastructure.Logging;
using ClassifiedAds.Infrastructure.Monitoring;
using CryptographyHelper.Certificates;

namespace ClassifiedAds.Services.Configuration.ConfigurationOptions;

Expand Down Expand Up @@ -31,9 +32,22 @@ public class ConnectionStrings

public class IdentityServerAuthentication
{
public string Provider { get; set; }

public string Authority { get; set; }

public string ApiName { get; set; }

public bool RequireHttpsMetadata { get; set; }

public OpenIddictOptions OpenIddict { get; set; }
}

public class OpenIddictOptions
{
public string IssuerUri { get; set; }

public CertificateOption TokenDecryptionCertificate { get; set; }

public CertificateOption IssuerSigningCertificate { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Polly;
using System;
using System.Reflection;
Expand Down Expand Up @@ -61,13 +62,30 @@ public void ConfigureServices(IServiceCollection services)

services.AddConfigurationModule(AppSettings);

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Polly;
using System;
using System.Reflection;
Expand Down Expand Up @@ -66,13 +67,30 @@ public void ConfigureServices(IServiceCollection services)
.PersistKeysToDbContext<IdentityDbContext>()
.SetApplicationName("ClassifiedAds");

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;

namespace ClassifiedAds.Services.Identity.Grpc;

Expand Down Expand Up @@ -44,13 +45,31 @@ public void ConfigureServices(IServiceCollection services)
.PersistKeysToDbContext<IdentityDbContext>()
.SetApplicationName("ClassifiedAds");

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});

services.AddAuthorization();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using ClassifiedAds.Infrastructure.Logging;
using ClassifiedAds.Infrastructure.Monitoring;
using ClassifiedAds.Infrastructure.Notification;
using CryptographyHelper.Certificates;

namespace ClassifiedAds.Services.Identity.ConfigurationOptions;

Expand Down Expand Up @@ -32,9 +33,22 @@ public class ConnectionStrings

public class IdentityServerAuthentication
{
public string Provider { get; set; }

public string Authority { get; set; }

public string ApiName { get; set; }

public bool RequireHttpsMetadata { get; set; }

public OpenIddictOptions OpenIddict { get; set; }
}

public class OpenIddictOptions
{
public string IssuerUri { get; set; }

public CertificateOption TokenDecryptionCertificate { get; set; }

public CertificateOption IssuerSigningCertificate { get; set; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.IdentityModel.Tokens;
using Polly;
using System;
using System.Reflection;
Expand Down Expand Up @@ -69,13 +70,30 @@ public void ConfigureServices(IServiceCollection services)

services.AddNotificationModule(AppSettings);

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
});
services.AddAuthentication(options =>
{
options.DefaultScheme = AppSettings.IdentityServerAuthentication.Provider switch
{
"OpenIddict" => "OpenIddict",
_ => JwtBearerDefaults.AuthenticationScheme
};
})
.AddJwtBearer(options =>
{
options.Authority = AppSettings.IdentityServerAuthentication.Authority;
options.Audience = AppSettings.IdentityServerAuthentication.ApiName;
options.RequireHttpsMetadata = AppSettings.IdentityServerAuthentication.RequireHttpsMetadata;
})
.AddJwtBearer("OpenIddict", options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false,
ValidIssuer = AppSettings.IdentityServerAuthentication.OpenIddict.IssuerUri,
TokenDecryptionKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.TokenDecryptionCertificate.FindCertificate()),
IssuerSigningKey = new X509SecurityKey(AppSettings.IdentityServerAuthentication.OpenIddict.IssuerSigningCertificate.FindCertificate()),
};
});

services.AddHostedService<PushNotificationHostedService>();
}
Expand Down

0 comments on commit dbbffab

Please sign in to comment.