diff --git a/.github/workflows/admin-sample.cd.yml b/.github/workflows/admin-sample.cd.yml index 043670bc44..d47f45845d 100644 --- a/.github/workflows/admin-sample.cd.yml +++ b/.github/workflows/admin-sample.cd.yml @@ -136,17 +136,6 @@ jobs: with: name: server-bundle - - name: Delete DataProtectionCertificate.pfx - run: | - rm DataProtectionCertificate.pfx - - - name: Extract identity certificate from env - uses: timheuer/base64-to-file@v1.2 - with: - fileDir: './' - fileName: 'DataProtectionCertificate.pfx' - encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} - - name: Retrieve AppleAuthKey.p8 run: echo "${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY_ADMIN }}" > AppleAuthKey.p8 diff --git a/.github/workflows/sales-module-demo.cd.yml b/.github/workflows/sales-module-demo.cd.yml index 0497403057..5de4fe5abb 100644 --- a/.github/workflows/sales-module-demo.cd.yml +++ b/.github/workflows/sales-module-demo.cd.yml @@ -89,17 +89,6 @@ jobs: with: name: server-bundle - - name: Delete DataProtectionCertificate.pfx - run: | - rm DataProtectionCertificate.pfx - - - name: Extract identity certificate from env - uses: timheuer/base64-to-file@v1.2 - with: - fileDir: './' - fileName: 'DataProtectionCertificate.pfx' - encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} - # - name: Retrieve AppleAuthKey.p8 # run: echo "${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY_SALES }}" > AppleAuthKey.p8 diff --git a/.github/workflows/todo-sample.cd.yml b/.github/workflows/todo-sample.cd.yml index 26d0d571e4..9c7e31b895 100644 --- a/.github/workflows/todo-sample.cd.yml +++ b/.github/workflows/todo-sample.cd.yml @@ -90,17 +90,6 @@ jobs: with: name: server-bundle - - name: Delete DataProtectionCertificate.pfx - run: | - rm DataProtectionCertificate.pfx - - - name: Extract identity certificate from env - uses: timheuer/base64-to-file@v1.2 - with: - fileDir: './' - fileName: 'DataProtectionCertificate.pfx' - encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} - - name: Retrieve AppleAuthKey.p8 run: echo "${{ secrets.APPSTORE_API_KEY_PRIVATE_KEY_TODO }}" > AppleAuthKey.p8 diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml index e213b76f9b..1ef14b99d9 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.azure-devops/workflows/cd.yml @@ -7,7 +7,7 @@ variables: APP_SERVICE_NAME: 'app-service-bp-test' AZURE_SUBSCRIPTION: 'bp-test-service-connection' # https://learn.microsoft.com/en-us/azure/devops/pipelines/library/service-endpoints?view=azure-devops&tabs=yaml#azure-resource-manager-service-connection ConnectionStrings.SqlServerConnectionString: $(DB_CONNECTION_STRING) - DataProtectionCertificatePassword: $(API_DATA_PROTECTION_CERTIFICATE_PASSWORD) + Identity.JwtIssuerSigningKeySecret: $(Jwt_Issuer_Signing_Key_Secret) ServerAddress: 'https://use-your-api-server-url-here.com/' WindowsUpdate.FilesUrl: 'https://use-your-api-server-url-here.com/windows' # Deploy the published Windows application files to your desired hosting location and use the host url here. WebAppRender.BlazorMode: 'BlazorWebAssembly' @@ -106,18 +106,6 @@ jobs: folderPath: './' targetFiles: 'appsettings.json' - - task: DownloadSecureFile@1 - displayName: Download .pfx file - name: DataProtectionCertificate - inputs: - secureFile: 'DataProtectionCertificate.pfx' - - - script: | - rm DataProtectionCertificate.pfx - cp "$(DataProtectionCertificate.secureFilePath)" "DataProtectionCertificate.pfx" - failOnStderr: true - displayName: Copy .pfx file - - task: Bash@3 displayName: 'Run migrations' inputs: diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd.yml b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd.yml index 5fa753778c..5ed9c486a2 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd.yml +++ b/src/Templates/Boilerplate/Bit.Boilerplate/.github/workflows/cd.yml @@ -99,19 +99,8 @@ jobs: with: files: 'appsettings.json' env: - ConnectionStrings_SqlServerConnectionString: ${{ secrets.DB_CONNECTION_STRING }} - DataProtectionCertificatePassword: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_PASSWORD }} - - - name: Delete DataProtectionCertificate.pfx - run: | - rm DataProtectionCertificate.pfx - - - name: Extract data protection certificate from env - uses: timheuer/base64-to-file@v1.2 - with: - fileDir: './' - fileName: 'DataProtectionCertificate.pfx' - encodedString: ${{ secrets.API_DATA_PROTECTION_CERTIFICATE_FILE_BASE64 }} + ConnectionStrings.SqlServerConnectionString: ${{ secrets.DB_CONNECTION_STRING }} + Identity.JwtIssuerSigningKeySecret: ${{ secrets.Jwt_Issuer_Signing_Key_Secret }} - name: Run migrations run: | diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor index d8c9db1bb6..fc7619c2be 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor @@ -88,8 +88,8 @@ IconName="@BitIconName.RecycleBin" /> } diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor.Utils.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor.Utils.cs index a218c0e5cf..bc40aa51f1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor.Utils.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Core/Components/Layout/AppDiagnosticModal.razor.Utils.cs @@ -105,7 +105,7 @@ private string GetMemoryUsage() return $"{memory / (1024.0 * 1024.0):F2} MB"; } - private async Task ClearData() + private async Task ClearCache() { try { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/App.xaml.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/App.xaml.cs index 9ced9dcf2e..47294e2f93 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/App.xaml.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Client/Boilerplate.Client.Maui/App.xaml.cs @@ -60,12 +60,12 @@ protected override async void OnStart() base.OnStart(); await deviceCoordinator.ApplyTheme(AppInfo.Current.RequestedTheme is AppTheme.Dark); - + //-:cnd:noEmit #if Android - const int minimumSupportedWebViewVersion = 84; + const int minimumSupportedWebViewVersion = 85; // Download link for Android emulator (x86 or x86_64) - // https://www.apkmirror.com/apk/google-inc/chrome/chrome-84-0-4147-89-release/ - // https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-84-0-4147-111-release/ + // https://www.apkmirror.com/apk/google-inc/chrome/chrome-85-0-4183-127-release/ + // https://www.apkmirror.com/apk/google-inc/android-system-webview/android-system-webview-85-0-4183-127-release/ if (Version.TryParse(Android.Webkit.WebView.CurrentWebViewPackage?.VersionName, out var webViewVersion) && webViewVersion.Major < minimumSupportedWebViewVersion) @@ -76,7 +76,7 @@ protected override async void OnStart() await Launcher.OpenAsync($"https://play.google.com/store/apps/details?id={webViewName}"); } #endif - + //+:cnd:noEmit await CheckForUpdates(); } catch (Exception exp) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props index 9aa77300e1..fd456c9a61 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Directory.Packages.props @@ -77,7 +77,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj index 3808572e0d..c23dea9747 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Boilerplate.Server.Api.csproj @@ -27,7 +27,6 @@ - @@ -60,10 +59,6 @@ - - Always - - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs index 9822b89e63..718ca9af8f 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Data/AppDbContext.cs @@ -6,10 +6,9 @@ //#if (sample == true) using Boilerplate.Server.Api.Models.Todo; //#endif -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore; using Boilerplate.Server.Api.Models.Identity; using Boilerplate.Server.Api.Data.Configurations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; //#if (notification == true) using Boilerplate.Server.Api.Models.PushNotification; //#endif @@ -20,10 +19,8 @@ namespace Boilerplate.Server.Api.Data; public partial class AppDbContext(DbContextOptions options) - : IdentityDbContext(options), IDataProtectionKeyContext + : IdentityDbContext(options) { - public DbSet DataProtectionKeys { get; set; } = default!; - public DbSet UserSessions { get; set; } = default!; //#if (sample == true) diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/DataProtectionCertificate.pfx b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/DataProtectionCertificate.pfx deleted file mode 100644 index 136582fef9..0000000000 Binary files a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/DataProtectionCertificate.pfx and /dev/null differ diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs index 207fa1b314..5432c6e3ad 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Program.Services.cs @@ -6,10 +6,9 @@ using Microsoft.AspNetCore.OData; using Microsoft.Net.Http.Headers; using Microsoft.IdentityModel.Tokens; -using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.ResponseCompression; -using System.Security.Cryptography.X509Certificates; using Twilio; +using System.Text; using Fido2NetLib; using PhoneNumbers; using FluentStorage; @@ -331,16 +330,6 @@ private static void AddIdentity(WebApplicationBuilder builder) configuration.Bind(appSettings); var identityOptions = appSettings.Identity; - var certificatePath = Path.Combine(AppContext.BaseDirectory, "DataProtectionCertificate.pfx"); - var certificate = new X509Certificate2(certificatePath, appSettings.DataProtectionCertificatePassword, AppPlatform.IsWindows ? X509KeyStorageFlags.EphemeralKeySet : X509KeyStorageFlags.DefaultKeySet); - - if (env.IsDevelopment() is false && (DateTimeOffset.UtcNow < certificate.NotBefore || DateTimeOffset.UtcNow > certificate.NotAfter)) - throw new InvalidOperationException($"The Data Protection certificate is invalid. Current UTC time: {DateTimeOffset.UtcNow}, Certificate valid from: {certificate.NotBefore.ToUniversalTime()}, Certificate valid until: {certificate.NotAfter.ToUniversalTime()}."); - - services.AddDataProtection() - .PersistKeysToDbContext() - .ProtectKeysWithCertificate(certificate); - services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders() @@ -367,7 +356,7 @@ private static void AddIdentity(WebApplicationBuilder builder) RequireSignedTokens = true, ValidateIssuerSigningKey = env.IsDevelopment() is false, - IssuerSigningKey = new X509SecurityKey(certificate), + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(appSettings.Identity.JwtIssuerSigningKeySecret)), RequireExpirationTime = true, ValidateLifetime = true, diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Properties/launchSettings.json index 915416aeb7..90b3f311b8 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Properties/launchSettings.json @@ -45,7 +45,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:57278/", + "applicationUrl": "http://localhost:55031/", "httpPort": 5031 } }, diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/ServerApiSettings.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/ServerApiSettings.cs index 606a98beef..1dcc69e9ca 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/ServerApiSettings.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/ServerApiSettings.cs @@ -2,6 +2,7 @@ //#if (notification == true) using AdsPush.Abstraction.Settings; //#endif +using System.Text; using System.Text.RegularExpressions; using Boilerplate.Server.Api.Services; @@ -9,12 +10,6 @@ namespace Boilerplate.Server.Api; public partial class ServerApiSettings : SharedSettings { - /// - /// It can also be configured using: dotnet user-secrets set 'DataProtectionCertificatePassword' '@nyPassw0rd' - /// - [Required] - public string DataProtectionCertificatePassword { get; set; } = default!; - [Required] public AppIdentityOptions Identity { get; set; } = default!; @@ -85,12 +80,20 @@ public override IEnumerable Validate(ValidationContext validat } Validator.TryValidateObject(ResponseCaching, new ValidationContext(ResponseCaching), validationResults, true); + const int MinimumJwtIssuerSigningKeySecretByteLength = 64; // 512 bits = 64 bytes, minimum for HS512 + var jwtIssuerSigningKeySecretByteLength = Encoding.UTF8.GetBytes(Identity.JwtIssuerSigningKeySecret).Length; + if (jwtIssuerSigningKeySecretByteLength <= MinimumJwtIssuerSigningKeySecretByteLength) + { + throw new ArgumentException( + $"The JWT signing key must be greater than {MinimumJwtIssuerSigningKeySecretByteLength} bytes " + + $"({MinimumJwtIssuerSigningKeySecretByteLength * 8} bits) for HS512. Current key is {jwtIssuerSigningKeySecretByteLength} bytes."); + } + if (AppEnvironment.IsDev() is false) { - if (DataProtectionCertificatePassword is "P@ssw0rdP@ssw0rd") + if (Identity.JwtIssuerSigningKeySecret is "VeryLongJWTIssuerSiginingKeySecretThatIsMoreThan64BytesToEnsureCompatibilityWithHS512Algorithm") { - throw new InvalidOperationException(@"The default test certificate is still in use. Please replace it with a new one by running the 'dotnet dev-certs https --export-path DataProtectionCertificate.pfx --password @nyPassw0rd' -command in the Server.Api's project's folder and replace P@ssw0rdP@ssw0rd with the new password."); + throw new InvalidOperationException(@"Please replace JwtIssuerSigningKeySecret with a new one."); } //#if (captcha == "reCaptcha") @@ -132,6 +135,9 @@ internal bool IsAllowedOrigin(Uri origin) public partial class AppIdentityOptions : IdentityOptions { + [Required] + public string JwtIssuerSigningKeySecret { get; set; } = default!; + /// /// BearerTokenExpiration used as JWT's expiration claim, access token's `expires in` and cookie's `max age`. /// diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Services/Identity/AppJwtSecureDataFormat.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Services/Identity/AppJwtSecureDataFormat.cs index 721e248d0c..d107424275 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Services/Identity/AppJwtSecureDataFormat.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/Services/Identity/AppJwtSecureDataFormat.cs @@ -59,7 +59,7 @@ public string Protect(AuthenticationTicket data, string? purpose) Audience = appSettings.Identity.Audience, IssuedAt = DateTimeOffset.UtcNow.DateTime, Expires = data.Properties.ExpiresUtc!.Value.UtcDateTime, - SigningCredentials = new SigningCredentials(validationParameters.IssuerSigningKey, SecurityAlgorithms.RsaSha512), + SigningCredentials = new SigningCredentials(validationParameters.IssuerSigningKey, SecurityAlgorithms.HmacSha512), Subject = new ClaimsIdentity(data.Principal.Claims), }); diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json index 225695696c..94ef3ba188 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Api/appsettings.json @@ -23,9 +23,8 @@ } }, //#endif - "DataProtectionCertificatePassword": "P@ssw0rdP@ssw0rd", - "DataProtectionCertificatePassword_Comment": "It can also be configured using: dotnet user-secrets set 'DataProtectionCertificatePassword' '@nyPassw0rd'", "Identity": { + "JwtIssuerSigningKeySecret": "VeryLongJWTIssuerSiginingKeySecretThatIsMoreThan64BytesToEnsureCompatibilityWithHS512Algorithm", "Issuer": "Boilerplate", "Audience": "Boilerplate", "BearerTokenExpiration": "0.00:05:00", diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj index b3ca19fa99..5136f2504a 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Boilerplate.Server.Web.csproj @@ -13,7 +13,6 @@ - diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json index 3a79b09dd3..994c78777b 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Properties/launchSettings.json @@ -67,7 +67,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:57278/", + "applicationUrl": "http://localhost:55030/", "httpPort": 5030 } }, diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/ServerWebSettings.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/ServerWebSettings.cs index 891c051b1f..9eb2b8cba1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/ServerWebSettings.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/ServerWebSettings.cs @@ -57,11 +57,13 @@ public IComponentRenderMode? RenderMode // you can switch between configurations like `DebugBlazorServer` and `DebugBlazorWasm`. // If `DebugBlazorServer` is selected, `BlazorMode` will be set to `BlazorServer` // regardless of its value in appsettings.json + //-:cnd:noEmit #if DebugBlazorServer mode = BlazorWebAppMode.BlazorServer; #elif DebugBlazorWasm mode = BlazorWebAppMode.BlazorWebAssembly; #endif + //+:cnd:noEmit return mode switch { diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Services/SimpleJwtSecureDataFormat.cs b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Services/SimpleJwtSecureDataFormat.cs index 86f0e64ad0..1e7476da79 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Services/SimpleJwtSecureDataFormat.cs +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/Services/SimpleJwtSecureDataFormat.cs @@ -6,7 +6,7 @@ namespace Boilerplate.Server.Web.Services; /// /// In standalone API mode, this code only runs during Blazor pre-rendering or Blazor Server. -/// Since the `AppSecureJWTFormat` in the Server.Api project strictly validates access tokens using the provided PFX file, +/// Since the `AppSecureJWTFormat` in the Server.Api project strictly validates access tokens using the provided JwtIssuerSigningKeySecret, /// strict validation isn't necessary here. Instead, we simply parse the token, similar to how it's handled on the client side (Blazor WASM and Blazor Hybrid). /// public partial class SimpleJwtSecureDataFormat : ISecureDataFormat diff --git a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json index 774f1d4e90..472c0dc5f1 100644 --- a/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json +++ b/src/Templates/Boilerplate/Bit.Boilerplate/src/Server/Boilerplate.Server.Web/appsettings.json @@ -8,8 +8,8 @@ "AzureBlobStorageSasUrl": "emulator" }, - "DataProtectionCertificatePassword": "P@ssw0rdP@ssw0rd", "Identity": { + "JwtIssuerSigningKeySecret": "VeryLongJWTIssuerSiginingKeySecretThatIsMoreThan64BytesToEnsureCompatibilityWithHS512Algorithm", "Issuer": "Boilerplate", "Audience": "Boilerplate", "BearerTokenExpiration": "0.00:05:00", @@ -93,8 +93,6 @@ "ZoneId": null, "AdditionalDomains": [] }, - //#endif - //#if (signalR == true) "Azure": { "SignalR": { "ConnectionString": null diff --git a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj index 5f67c0f02b..fd7bdf4b23 100644 --- a/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj +++ b/src/Websites/Careers/src/Bit.Websites.Careers.Server/Bit.Websites.Careers.Server.csproj @@ -31,12 +31,6 @@ - - - Always - - - True diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor index ba3bec3035..c709450df5 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Client/Pages/Templates/Templates01OverviewPage.razor @@ -57,7 +57,7 @@
  • iOS 15+
  • Windows 7 SP1+
  • macOS (Monterey) 12+
  • -
  • Android 8+ & WebView 84+
  • +
  • Android 8+ & WebView 85+
  • diff --git a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj index bab2a3257b..b8a5977687 100644 --- a/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj +++ b/src/Websites/Platform/src/Bit.Websites.Platform.Server/Bit.Websites.Platform.Server.csproj @@ -31,12 +31,6 @@
    - - - Always - - - True diff --git a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj index 9883ca1442..2ecb2972b1 100644 --- a/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj +++ b/src/Websites/Sales/src/Bit.Websites.Sales.Server/Bit.Websites.Sales.Server.csproj @@ -31,12 +31,6 @@ - - - Always - - - True