diff --git a/IdentityServer/v7/UserInteraction/Ciba/.vscode/launch.json b/IdentityServer/v7/UserInteraction/Ciba/.vscode/launch.json new file mode 100644 index 00000000..c1fb80d6 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/.vscode/launch.json @@ -0,0 +1,58 @@ +{ + "version": "0.2.0", + "compounds": [ + { + "name": "Run All", + "configurations": ["Api","Client","IdentityServerHost"], + "presentation": { + "group": "10-compounds", + "order": 1 + } + } + ], + "configurations": [ + { + "name": "IdentityServerHost", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-identityserver", + "program": "${workspaceFolder}/IdentityServerHost/bin/Debug/net8.0/IdentityServerHost.dll", + "args": [], + "cwd": "${workspaceFolder}/IdentityServerHost", + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "console": "externalTerminal" + }, + { + "name": "Client", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-client", + "program": "${workspaceFolder}/Client/bin/Debug/net8.0/Client.dll", + "args": [], + "cwd": "${workspaceFolder}/Client", + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "console": "externalTerminal" + }, + { + "name": "Api", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-api", + "program": "${workspaceFolder}/Api/bin/Debug/net8.0/Api.dll", + "args": [], + "cwd": "${workspaceFolder}/Api", + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "console": "externalTerminal" + } + ] +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/.vscode/tasks.json b/IdentityServer/v7/UserInteraction/Ciba/.vscode/tasks.json new file mode 100644 index 00000000..b899d72f --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/.vscode/tasks.json @@ -0,0 +1,41 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-identityserver", + "type": "process", + "command": "dotnet", + "args": [ + "build", + "${workspaceFolder}/IdentityServerHost/IdentityServerHost.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-client", + "type": "process", + "command": "dotnet", + "args": [ + "build", + "${workspaceFolder}/Client/Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-api", + "type": "process", + "command": "dotnet", + "args": [ + "build", + "${workspaceFolder}/Api/Api.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/SimpleApi.csproj b/IdentityServer/v7/UserInteraction/Ciba/Api/Api.csproj old mode 100755 new mode 100644 similarity index 57% rename from IdentityServer/v7/UserInteraction/Ciba/SimpleApi/SimpleApi.csproj rename to IdentityServer/v7/UserInteraction/Ciba/Api/Api.csproj index 72f6c576..336096b3 --- a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/SimpleApi.csproj +++ b/IdentityServer/v7/UserInteraction/Ciba/Api/Api.csproj @@ -1,12 +1,12 @@  - net5.0 + net8.0 - - + + \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/Api/Constants.cs b/IdentityServer/v7/UserInteraction/Ciba/Api/Constants.cs new file mode 100644 index 00000000..e45717db --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Api/Constants.cs @@ -0,0 +1,7 @@ +namespace Api; + +public class Constants +{ + public const string Authority = "https://localhost:5001"; + public const string SampleApi = "https://localhost:5005/"; +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/Api/IdentityController.cs b/IdentityServer/v7/UserInteraction/Ciba/Api/IdentityController.cs new file mode 100644 index 00000000..21183a40 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Api/IdentityController.cs @@ -0,0 +1,27 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using System.Linq; + +namespace Api; + +[Route("identity")] +public class IdentityController : ControllerBase +{ + private readonly ILogger _logger; + + public IdentityController(ILogger logger) + { + _logger = logger; + } + + // this action simply echoes the claims back to the client + [HttpGet] + public ActionResult Get() + { + var claims = User.Claims.Select(c => new { c.Type, c.Value }); + _logger.LogInformation("claims: {claims}", claims); + + return new JsonResult(claims); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/Api/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/Api/Program.cs new file mode 100644 index 00000000..84cb688f --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Api/Program.cs @@ -0,0 +1,34 @@ +using System; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Sinks.SystemConsole.Themes; + +namespace Api; + +public class Program +{ + public static void Main(string[] args) + { + Console.Title = "API"; + + BuildWebHost(args).Run(); + } + + public static IHost BuildWebHost(string[] args) + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .Enrich.FromLogContext() + .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) + .CreateLogger(); + + return Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }) + .UseSerilog() + .Build(); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Properties/launchSettings.json b/IdentityServer/v7/UserInteraction/Ciba/Api/Properties/launchSettings.json old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Properties/launchSettings.json rename to IdentityServer/v7/UserInteraction/Ciba/Api/Properties/launchSettings.json diff --git a/IdentityServer/v7/UserInteraction/Ciba/Api/Startup.cs b/IdentityServer/v7/UserInteraction/Ciba/Api/Startup.cs new file mode 100644 index 00000000..0992cfab --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Api/Startup.cs @@ -0,0 +1,41 @@ +using System.IdentityModel.Tokens.Jwt; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; + + +namespace Api; + +public class Startup +{ + public Startup() + { + JwtSecurityTokenHandler.DefaultMapInboundClaims = false; + } + + public void ConfigureServices(IServiceCollection services) + { + services.AddControllers(); + + // this API will accept any access token from the authority + services.AddAuthentication("token") + .AddJwtBearer("token", options => + { + options.Authority = Constants.Authority; + options.TokenValidationParameters.ValidateAudience = false; + + options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" }; + }); + } + + public void Configure(IApplicationBuilder app) + { + app.UseRouting(); + app.UseAuthentication(); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapControllers().RequireAuthorization(); + }); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleCibaClient.csproj b/IdentityServer/v7/UserInteraction/Ciba/Client/Client.csproj old mode 100755 new mode 100644 similarity index 82% rename from IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleCibaClient.csproj rename to IdentityServer/v7/UserInteraction/Ciba/Client/Client.csproj index e37d4b21..6154708e --- a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleCibaClient.csproj +++ b/IdentityServer/v7/UserInteraction/Ciba/Client/Client.csproj @@ -1,7 +1,7 @@ - net6.0 + net8.0 Exe diff --git a/IdentityServer/v7/UserInteraction/Ciba/Client/ConsoleExtensions.cs b/IdentityServer/v7/UserInteraction/Ciba/Client/ConsoleExtensions.cs new file mode 100644 index 00000000..5bc6788e --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Client/ConsoleExtensions.cs @@ -0,0 +1,50 @@ +using System; +using System.Diagnostics; + +namespace Clients; + +public static class ConsoleExtensions +{ + /// + /// Writes green text to the console. + /// + /// The text. + [DebuggerStepThrough] + public static void ConsoleGreen(this string text) + { + text.ColoredWriteLine(ConsoleColor.Green); + } + + /// + /// Writes red text to the console. + /// + /// The text. + [DebuggerStepThrough] + public static void ConsoleRed(this string text) + { + text.ColoredWriteLine(ConsoleColor.Red); + } + + /// + /// Writes yellow text to the console. + /// + /// The text. + [DebuggerStepThrough] + public static void ConsoleYellow(this string text) + { + text.ColoredWriteLine(ConsoleColor.Yellow); + } + + /// + /// Writes out text with the specified ConsoleColor. + /// + /// The text. + /// The color. + [DebuggerStepThrough] + public static void ColoredWriteLine(this string text, ConsoleColor color) + { + Console.ForegroundColor = color; + Console.WriteLine(text); + Console.ResetColor(); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/Client/Constants.cs b/IdentityServer/v7/UserInteraction/Ciba/Client/Constants.cs new file mode 100644 index 00000000..0b5dff18 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Client/Constants.cs @@ -0,0 +1,7 @@ +namespace Clients; + +public class Constants +{ + public const string Authority = "https://localhost:5001"; + public const string SampleApi = "https://localhost:5002/"; +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/Client/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/Client/Program.cs new file mode 100644 index 00000000..3ddf843a --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Client/Program.cs @@ -0,0 +1,121 @@ +using Clients; +using IdentityModel; +using IdentityModel.Client; +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Security.Claims; +using System.Threading; +using System.Threading.Tasks; + +namespace Client; + +public class Program +{ + static IDiscoveryCache _cache = new DiscoveryCache(Constants.Authority); + + public static async Task Main() + { + Console.Title = "Client"; + + var loginResponse = await RequestBackchannelLoginAsync(); + + var tokenResponse = await RequestTokenAsync(loginResponse); + tokenResponse.Show(); + + Console.ReadLine(); + await CallServiceAsync(tokenResponse.AccessToken); + } + + static async Task RequestBackchannelLoginAsync() + { + var disco = await _cache.GetAsync(); + if (disco.IsError) throw new Exception(disco.Error); + + var cibaEp = disco.BackchannelAuthenticationEndpoint; + + var username = "alice"; + var bindingMessage = Guid.NewGuid().ToString("N").Substring(0, 10); + + var req = new BackchannelAuthenticationRequest() + { + Address = cibaEp, + ClientId = "ciba", + ClientSecret = "secret", + Scope = "openid profile scope1 offline_access", + LoginHint = username, + //IdTokenHint = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkYyNjZCQzA3NTFBNjIyNDkzMzFDMzI4QUQ1RkIwMkJGIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo1MDAxIiwibmJmIjoxNjM4NDc3MDE2LCJpYXQiOjE2Mzg0NzcwMTYsImV4cCI6MTYzODQ3NzMxNiwiYXVkIjoiY2liYSIsImFtciI6WyJwd2QiXSwiYXRfaGFzaCI6ImE1angwelVQZ2twczBVS1J5VjBUWmciLCJzaWQiOiIzQTJDQTJDNjdBNTAwQ0I2REY1QzEyRUZDMzlCQTI2MiIsInN1YiI6IjgxODcyNyIsImF1dGhfdGltZSI6MTYzODQ3NzAwOCwiaWRwIjoibG9jYWwifQ.GAIHXYgEtXw5NasR0zPMW3jSKBuWujzwwnXJnfHdulKX-I3r47N0iqHm5v5V0xfLYdrmntjLgmdm0DSvdXswtZ1dh96DqS1zVm6yQ2V0zsA2u8uOt1RG8qtjd5z4Gb_wTvks4rbUiwi008FOZfRuqbMJJDSscy_YdEJqyQahdzkcUnWZwdbY8L2RUTxlAAWQxktpIbaFnxfr8PFQpyTcyQyw0b7xmYd9ogR7JyOff7IJIHPDur0wbRdpI1FDE_VVCgoze8GVAbVxXPtj4CtWHAv07MJxa9SdA_N-lBcrZ3PHTKQ5t1gFXwdQvp3togUJl33mJSru3lqfK36pn8y8ow", + BindingMessage = bindingMessage, + RequestedExpiry = 200 + }; + + var client = new HttpClient(); + var response = await client.RequestBackchannelAuthenticationAsync(req); + + if (response.IsError) throw new Exception(response.Error); + + Console.WriteLine($"Login Hint : {username}"); + Console.WriteLine($"Binding Message : {bindingMessage}"); + Console.WriteLine($"Authentication Request Id : {response.AuthenticationRequestId}"); + Console.WriteLine($"Expires In : {response.ExpiresIn}"); + Console.WriteLine($"Interval : {response.Interval}"); + Console.WriteLine(); + + Console.WriteLine($"\nPress enter to start polling the token endpoint."); + Console.ReadLine(); + + return response; + } + + private static async Task RequestTokenAsync(BackchannelAuthenticationResponse authorizeResponse) + { + var disco = await _cache.GetAsync(); + if (disco.IsError) throw new Exception(disco.Error); + + var client = new HttpClient(); + + while (true) + { + var response = await client.RequestBackchannelAuthenticationTokenAsync(new BackchannelAuthenticationTokenRequest + { + Address = disco.TokenEndpoint, + ClientId = "ciba", + ClientSecret = "secret", + AuthenticationRequestId = authorizeResponse.AuthenticationRequestId + }); + + if (response.IsError) + { + if (response.Error == OidcConstants.TokenErrors.AuthorizationPending || response.Error == OidcConstants.TokenErrors.SlowDown) + { + Console.WriteLine($"{response.Error}...waiting."); + Thread.Sleep(authorizeResponse.Interval.Value * 1000); + } + else + { + throw new Exception(response.Error); + } + } + else + { + return response; + } + } + } + + static async Task CallServiceAsync(string token) + { + var baseAddress = Constants.SampleApi; + + var client = new HttpClient + { + BaseAddress = new Uri(baseAddress) + }; + + client.SetBearerToken(token); + var response = await client.GetStringAsync("identity"); + + "\n\nService claims:".ConsoleGreen(); + Console.WriteLine(response.PrettyPrintJson()); + } +} diff --git a/IdentityServer/v7/UserInteraction/Ciba/Client/TokenResponseExtensions.cs b/IdentityServer/v7/UserInteraction/Ciba/Client/TokenResponseExtensions.cs new file mode 100644 index 00000000..363d24fe --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/Client/TokenResponseExtensions.cs @@ -0,0 +1,52 @@ +using IdentityModel; +using IdentityModel.Client; +using System; +using System.Text; +using System.Text.Json; + +namespace Clients; + +public static class TokenResponseExtensions +{ + public static void Show(this TokenResponse response) + { + if (!response.IsError) + { + "Token response:".ConsoleGreen(); + Console.WriteLine(response.Json); + + if (response.AccessToken.Contains(".")) + { + "\nAccess Token (decoded):".ConsoleGreen(); + + var parts = response.AccessToken.Split('.'); + var header = parts[0]; + var payload = parts[1]; + + Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(header)))); + Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(payload)))); + } + } + else + { + if (response.ErrorType == ResponseErrorType.Http) + { + "HTTP error: ".ConsoleGreen(); + Console.WriteLine(response.Error); + "HTTP status code: ".ConsoleGreen(); + Console.WriteLine(response.HttpStatusCode); + } + else + { + "Protocol error response:".ConsoleGreen(); + Console.WriteLine(response.Raw); + } + } + } + + public static string PrettyPrintJson(this string raw) + { + var doc = JsonDocument.Parse(raw).RootElement; + return JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleExtensions.cs b/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleExtensions.cs deleted file mode 100755 index 716c2cd8..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/ConsoleExtensions.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Diagnostics; - -namespace Clients -{ - public static class ConsoleExtensions - { - /// - /// Writes green text to the console. - /// - /// The text. - [DebuggerStepThrough] - public static void ConsoleGreen(this string text) - { - text.ColoredWriteLine(ConsoleColor.Green); - } - - /// - /// Writes red text to the console. - /// - /// The text. - [DebuggerStepThrough] - public static void ConsoleRed(this string text) - { - text.ColoredWriteLine(ConsoleColor.Red); - } - - /// - /// Writes yellow text to the console. - /// - /// The text. - [DebuggerStepThrough] - public static void ConsoleYellow(this string text) - { - text.ColoredWriteLine(ConsoleColor.Yellow); - } - - /// - /// Writes out text with the specified ConsoleColor. - /// - /// The text. - /// The color. - [DebuggerStepThrough] - public static void ColoredWriteLine(this string text, ConsoleColor color) - { - Console.ForegroundColor = color; - Console.WriteLine(text); - Console.ResetColor(); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Constants.cs b/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Constants.cs deleted file mode 100755 index bdbcdc5d..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Constants.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Clients -{ - public class Constants - { - public const string Authority = "https://localhost:5001"; - public const string SampleApi = "https://localhost:5002/"; - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Program.cs deleted file mode 100755 index 692cce93..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/Program.cs +++ /dev/null @@ -1,122 +0,0 @@ -using Clients; -using IdentityModel; -using IdentityModel.Client; -using System; -using System.Collections.Generic; -using System.Net.Http; -using System.Security.Claims; -using System.Threading; -using System.Threading.Tasks; - -namespace ConsoleCibaClient -{ - public class Program - { - static IDiscoveryCache _cache = new DiscoveryCache(Constants.Authority); - - public static async Task Main() - { - Console.Title = "Console CIBA Client"; - - var loginResponse = await RequestBackchannelLoginAsync(); - - var tokenResponse = await RequestTokenAsync(loginResponse); - tokenResponse.Show(); - - Console.ReadLine(); - await CallServiceAsync(tokenResponse.AccessToken); - } - - static async Task RequestBackchannelLoginAsync() - { - var disco = await _cache.GetAsync(); - if (disco.IsError) throw new Exception(disco.Error); - - var cibaEp = disco.BackchannelAuthenticationEndpoint; - - var username = "alice"; - var bindingMessage = Guid.NewGuid().ToString("N").Substring(0, 10); - - var req = new BackchannelAuthenticationRequest() - { - Address = cibaEp, - ClientId = "ciba", - ClientSecret = "secret", - Scope = "openid profile scope1 offline_access", - LoginHint = username, - //IdTokenHint = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkYyNjZCQzA3NTFBNjIyNDkzMzFDMzI4QUQ1RkIwMkJGIiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwczovL2xvY2FsaG9zdDo1MDAxIiwibmJmIjoxNjM4NDc3MDE2LCJpYXQiOjE2Mzg0NzcwMTYsImV4cCI6MTYzODQ3NzMxNiwiYXVkIjoiY2liYSIsImFtciI6WyJwd2QiXSwiYXRfaGFzaCI6ImE1angwelVQZ2twczBVS1J5VjBUWmciLCJzaWQiOiIzQTJDQTJDNjdBNTAwQ0I2REY1QzEyRUZDMzlCQTI2MiIsInN1YiI6IjgxODcyNyIsImF1dGhfdGltZSI6MTYzODQ3NzAwOCwiaWRwIjoibG9jYWwifQ.GAIHXYgEtXw5NasR0zPMW3jSKBuWujzwwnXJnfHdulKX-I3r47N0iqHm5v5V0xfLYdrmntjLgmdm0DSvdXswtZ1dh96DqS1zVm6yQ2V0zsA2u8uOt1RG8qtjd5z4Gb_wTvks4rbUiwi008FOZfRuqbMJJDSscy_YdEJqyQahdzkcUnWZwdbY8L2RUTxlAAWQxktpIbaFnxfr8PFQpyTcyQyw0b7xmYd9ogR7JyOff7IJIHPDur0wbRdpI1FDE_VVCgoze8GVAbVxXPtj4CtWHAv07MJxa9SdA_N-lBcrZ3PHTKQ5t1gFXwdQvp3togUJl33mJSru3lqfK36pn8y8ow", - BindingMessage = bindingMessage, - RequestedExpiry = 200 - }; - - var client = new HttpClient(); - var response = await client.RequestBackchannelAuthenticationAsync(req); - - if (response.IsError) throw new Exception(response.Error); - - Console.WriteLine($"Login Hint : {username}"); - Console.WriteLine($"Binding Message : {bindingMessage}"); - Console.WriteLine($"Authentication Request Id : {response.AuthenticationRequestId}"); - Console.WriteLine($"Expires In : {response.ExpiresIn}"); - Console.WriteLine($"Interval : {response.Interval}"); - Console.WriteLine(); - - Console.WriteLine($"\nPress enter to start polling the token endpoint."); - Console.ReadLine(); - - return response; - } - - private static async Task RequestTokenAsync(BackchannelAuthenticationResponse authorizeResponse) - { - var disco = await _cache.GetAsync(); - if (disco.IsError) throw new Exception(disco.Error); - - var client = new HttpClient(); - - while (true) - { - var response = await client.RequestBackchannelAuthenticationTokenAsync(new BackchannelAuthenticationTokenRequest - { - Address = disco.TokenEndpoint, - ClientId = "ciba", - ClientSecret = "secret", - AuthenticationRequestId = authorizeResponse.AuthenticationRequestId - }); - - if (response.IsError) - { - if (response.Error == OidcConstants.TokenErrors.AuthorizationPending || response.Error == OidcConstants.TokenErrors.SlowDown) - { - Console.WriteLine($"{response.Error}...waiting."); - Thread.Sleep(authorizeResponse.Interval.Value * 1000); - } - else - { - throw new Exception(response.Error); - } - } - else - { - return response; - } - } - } - - static async Task CallServiceAsync(string token) - { - var baseAddress = Constants.SampleApi; - - var client = new HttpClient - { - BaseAddress = new Uri(baseAddress) - }; - - client.SetBearerToken(token); - var response = await client.GetStringAsync("identity"); - - "\n\nService claims:".ConsoleGreen(); - Console.WriteLine(response.PrettyPrintJson()); - } - } -} diff --git a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/TokenResponseExtensions.cs b/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/TokenResponseExtensions.cs deleted file mode 100755 index cc92e2f5..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/ConsoleCibaClient/TokenResponseExtensions.cs +++ /dev/null @@ -1,53 +0,0 @@ -using IdentityModel; -using IdentityModel.Client; -using System; -using System.Text; -using System.Text.Json; - -namespace Clients -{ - public static class TokenResponseExtensions - { - public static void Show(this TokenResponse response) - { - if (!response.IsError) - { - "Token response:".ConsoleGreen(); - Console.WriteLine(response.Json); - - if (response.AccessToken.Contains(".")) - { - "\nAccess Token (decoded):".ConsoleGreen(); - - var parts = response.AccessToken.Split('.'); - var header = parts[0]; - var payload = parts[1]; - - Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(header)))); - Console.WriteLine(PrettyPrintJson(Encoding.UTF8.GetString(Base64Url.Decode(payload)))); - } - } - else - { - if (response.ErrorType == ResponseErrorType.Http) - { - "HTTP error: ".ConsoleGreen(); - Console.WriteLine(response.Error); - "HTTP status code: ".ConsoleGreen(); - Console.WriteLine(response.HttpStatusCode); - } - else - { - "Protocol error response:".ConsoleGreen(); - Console.WriteLine(response.Raw); - } - } - } - - public static string PrettyPrintJson(this string raw) - { - var doc = JsonDocument.Parse(raw).RootElement; - return JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer.sln b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer.sln index e411bd31..14a77a54 100755 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer.sln +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer.sln @@ -1,13 +1,12 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 +Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 15.0.26124.0 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "IdentityServer\IdentityServerHost.csproj", "{0196F924-7B04-4DDC-AB1E-C0DD1D329D5B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "IdentityServerHost\IdentityServerHost.csproj", "{0196F924-7B04-4DDC-AB1E-C0DD1D329D5B}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleCibaClient", "ConsoleCibaClient\ConsoleCibaClient.csproj", "{A31E166F-54C4-42E9-95E1-448B5BB8F3B3}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{A31E166F-54C4-42E9-95E1-448B5BB8F3B3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleApi", "SimpleApi\SimpleApi.csproj", "{194ABC4A-1D22-4C99-B529-E99372976E1A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Api", "Api\Api.csproj", "{194ABC4A-1D22-4C99-B529-E99372976E1A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Clients.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Clients.cs deleted file mode 100755 index bafd0b4e..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Clients.cs +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Duende Software. All rights reserved. -// See LICENSE in the project root for license information. - - -using Duende.IdentityServer.Models; -using System.Collections.Generic; -using Duende.IdentityServer; - -namespace IdentityServerHost -{ - public static class Clients - { - public static IEnumerable List => - new [] - { - /////////////////////////////////////////// - // CIBA Sample - ////////////////////////////////////////// - new Client - { - ClientId = "ciba", - ClientName = "CIBA Client", - ClientSecrets = { new Secret("secret".Sha256()) }, - AllowedGrantTypes = GrantTypes.Ciba, - RequireConsent = true, - AllowOfflineAccess = true, - AllowedScopes = - { - IdentityServerConstants.StandardScopes.OpenId, - IdentityServerConstants.StandardScopes.Profile, - "scope1", - "scope1" - } - }, - }; - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/IdentityServerHost.csproj b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/IdentityServerHost.csproj deleted file mode 100755 index df7d8807..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/IdentityServerHost.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - net6.0 - - - - - - - - \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Program.cs deleted file mode 100755 index acc3f415..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Program.cs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Duende Software. All rights reserved. -// See LICENSE in the project root for license information. - - -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; -using Serilog; -using Serilog.Events; -using Serilog.Sinks.SystemConsole.Themes; -using System; - -namespace IdentityServerHost -{ - public class Program - { - public static int Main(string[] args) - { - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Debug() - .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) - .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) - .MinimumLevel.Override("System", LogEventLevel.Warning) - .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information) - .Enrich.FromLogContext() - // uncomment to write to Azure diagnostics stream - //.WriteTo.File( - // @"D:\home\LogFiles\Application\identityserver.txt", - // fileSizeLimitBytes: 1_000_000, - // rollOnFileSizeLimit: true, - // shared: true, - // flushToDiskInterval: TimeSpan.FromSeconds(1)) - .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) - .CreateLogger(); - - try - { - Log.Information("Starting host..."); - CreateHostBuilder(args).Build().Run(); - return 0; - } - catch (Exception ex) - { - Log.Fatal(ex, "Host terminated unexpectedly."); - return 1; - } - finally - { - Log.CloseAndFlush(); - } - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .UseSerilog() - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Resources.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Resources.cs deleted file mode 100755 index 9b2fbd02..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Resources.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Duende Software. All rights reserved. -// See LICENSE in the project root for license information. - - -using Duende.IdentityServer.Models; -using System.Collections.Generic; - -namespace IdentityServerHost -{ - public static class Resources - { - public static IEnumerable Identity => - new IdentityResource[] - { - new IdentityResources.OpenId(), - new IdentityResources.Profile(), - }; - - public static IEnumerable ApiScopes => - new ApiScope[] - { - new ApiScope("scope1"), - new ApiScope("scope2"), - }; - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Startup.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Startup.cs deleted file mode 100755 index ee0d1987..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Startup.cs +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright (c) Duende Software. All rights reserved. -// See LICENSE in the project root for license information. - - -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; - -namespace IdentityServerHost -{ - public class Startup - { - public IWebHostEnvironment Environment { get; } - public IConfiguration Configuration { get; } - - public Startup(IWebHostEnvironment environment, IConfiguration configuration) - { - Environment = environment; - Configuration = configuration; - } - - public void ConfigureServices(IServiceCollection services) - { - services.AddRazorPages(); - - var builder = services.AddIdentityServer(options => - { - options.Events.RaiseErrorEvents = true; - options.Events.RaiseInformationEvents = true; - options.Events.RaiseFailureEvents = true; - options.Events.RaiseSuccessEvents = true; - - // see https://docs.duendesoftware.com/identityserver/v5/basics/resources - options.EmitStaticAudienceClaim = true; - }) - .AddTestUsers(TestUsers.Users); - - builder.AddInMemoryIdentityResources(Resources.Identity); - builder.AddInMemoryApiScopes(Resources.ApiScopes); - builder.AddInMemoryClients(Clients.List); - } - - public void Configure(IApplicationBuilder app) - { - if (Environment.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - - app.UseStaticFiles(); - - app.UseRouting(); - app.UseIdentityServer(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => - { - endpoints.MapRazorPages(); - }); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Clients.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Clients.cs new file mode 100644 index 00000000..a66b0af2 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Clients.cs @@ -0,0 +1,36 @@ +// Copyright (c) Duende Software. All rights reserved. +// See LICENSE in the project root for license information. + + +using Duende.IdentityServer.Models; +using System.Collections.Generic; +using Duende.IdentityServer; + +namespace IdentityServerHost; + +public static class Clients +{ + public static IEnumerable List => + new [] + { + /////////////////////////////////////////// + // CIBA Sample + ////////////////////////////////////////// + new Client + { + ClientId = "ciba", + ClientName = "CIBA Client", + ClientSecrets = { new Secret("secret".Sha256()) }, + AllowedGrantTypes = GrantTypes.Ciba, + RequireConsent = true, + AllowOfflineAccess = true, + AllowedScopes = + { + IdentityServerConstants.StandardScopes.OpenId, + IdentityServerConstants.StandardScopes.Profile, + "scope1", + "scope1" + } + }, + }; +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/IdentityServerHost.csproj b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/IdentityServerHost.csproj new file mode 100644 index 00000000..0a429b12 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/IdentityServerHost.csproj @@ -0,0 +1,12 @@ + + + + net8.0 + + + + + + + + \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/AccessDenied.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/AccessDenied.cshtml similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/AccessDenied.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/AccessDenied.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/AccessDenied.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/AccessDenied.cshtml.cs similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/AccessDenied.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/AccessDenied.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/InputModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/InputModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/InputModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/InputModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/LoginOptions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/LoginOptions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/LoginOptions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/LoginOptions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Login/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Login/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOut.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOut.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOut.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOut.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOut.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOut.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOut.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOut.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOutViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOutViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LoggedOutViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LoggedOutViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LogoutOptions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LogoutOptions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Account/Logout/LogoutOptions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Account/Logout/LogoutOptions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/All.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/All.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/All.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/All.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/All.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/All.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/All.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/All.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Consent.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Consent.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Consent.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Consent.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Consent.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Consent.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Consent.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Consent.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/ConsentOptions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/ConsentOptions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/ConsentOptions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/ConsentOptions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/InputModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/InputModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/InputModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/InputModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/_ScopeListItem.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/_ScopeListItem.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Ciba/_ScopeListItem.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Ciba/_ScopeListItem.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/ConsentOptions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/ConsentOptions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/ConsentOptions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/ConsentOptions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/InputModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/InputModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/InputModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/InputModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/_ScopeListItem.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/_ScopeListItem.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Consent/_ScopeListItem.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Consent/_ScopeListItem.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/DeviceOptions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/DeviceOptions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/DeviceOptions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/DeviceOptions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/InputModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/InputModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/InputModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/InputModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Success.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Success.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Success.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Success.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Success.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Success.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/Success.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/Success.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/_ScopeListItem.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/_ScopeListItem.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Device/_ScopeListItem.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Device/_ScopeListItem.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Diagnostics/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Diagnostics/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Extensions.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Extensions.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Extensions.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Extensions.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Callback.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Callback.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Callback.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Callback.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Callback.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Callback.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Callback.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Callback.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Challenge.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Challenge.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Challenge.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Challenge.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Challenge.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Challenge.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/ExternalLogin/Challenge.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/ExternalLogin/Challenge.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Grants/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Grants/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/ViewModel.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/ViewModel.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Home/Error/ViewModel.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Home/Error/ViewModel.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Redirect/Index.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Redirect/Index.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Redirect/Index.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Redirect/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Redirect/Index.cshtml.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Redirect/Index.cshtml.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Redirect/Index.cshtml.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Redirect/Index.cshtml.cs diff --git a/IdentityServer/v7/UserInteraction/ProfileService/IdentityServer/Pages/SecurityHeadersAttribute.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/SecurityHeadersAttribute.cs similarity index 80% rename from IdentityServer/v7/UserInteraction/ProfileService/IdentityServer/Pages/SecurityHeadersAttribute.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/SecurityHeadersAttribute.cs index 09081724..36f9dbd7 100644 --- a/IdentityServer/v7/UserInteraction/ProfileService/IdentityServer/Pages/SecurityHeadersAttribute.cs +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/SecurityHeadersAttribute.cs @@ -2,6 +2,7 @@ // See LICENSE in the project root for license information. +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.RazorPages; @@ -17,13 +18,13 @@ public override void OnResultExecuting(ResultExecutingContext context) // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Type-Options")) { - context.HttpContext.Response.Headers.Add("X-Content-Type-Options", "nosniff"); + context.HttpContext.Response.Headers.Append("X-Content-Type-Options", "nosniff"); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options if (!context.HttpContext.Response.Headers.ContainsKey("X-Frame-Options")) { - context.HttpContext.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); + context.HttpContext.Response.Headers.Append("X-Frame-Options", "SAMEORIGIN"); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy @@ -36,19 +37,19 @@ public override void OnResultExecuting(ResultExecutingContext context) // once for standards compliant browsers if (!context.HttpContext.Response.Headers.ContainsKey("Content-Security-Policy")) { - context.HttpContext.Response.Headers.Add("Content-Security-Policy", csp); + context.HttpContext.Response.Headers.Append("Content-Security-Policy", csp); } // and once again for IE if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Security-Policy")) { - context.HttpContext.Response.Headers.Add("X-Content-Security-Policy", csp); + context.HttpContext.Response.Headers.Append("X-Content-Security-Policy", csp); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy var referrer_policy = "no-referrer"; if (!context.HttpContext.Response.Headers.ContainsKey("Referrer-Policy")) { - context.HttpContext.Response.Headers.Add("Referrer-Policy", referrer_policy); + context.HttpContext.Response.Headers.Append("Referrer-Policy", referrer_policy); } } } diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_Layout.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_Layout.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_Layout.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_Layout.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_Nav.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_Nav.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_Nav.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_Nav.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_ValidationSummary.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_ValidationSummary.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/Shared/_ValidationSummary.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/Shared/_ValidationSummary.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/TestUsers.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/TestUsers.cs old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/TestUsers.cs rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/TestUsers.cs diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/_ViewImports.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/_ViewImports.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/_ViewImports.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/_ViewImports.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/_ViewStart.cshtml b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/_ViewStart.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Pages/_ViewStart.cshtml rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Pages/_ViewStart.cshtml diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Program.cs new file mode 100644 index 00000000..ce1083c7 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Program.cs @@ -0,0 +1,49 @@ +// Copyright (c) Duende Software. All rights reserved. +// See LICENSE in the project root for license information. + + +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Serilog; +using Serilog.Sinks.SystemConsole.Themes; +using System; + +namespace IdentityServerHost; + +public class Program +{ + public static int Main(string[] args) + { + Console.Title = "IdentityServer"; + + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .Enrich.FromLogContext() + .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) + .CreateLogger(); + + try + { + Log.Information("Starting host..."); + CreateHostBuilder(args).Build().Run(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly."); + return 1; + } + finally + { + Log.CloseAndFlush(); + } + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .UseSerilog() + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Properties/launchSettings.json b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Properties/launchSettings.json old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/Properties/launchSettings.json rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Properties/launchSettings.json diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Resources.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Resources.cs new file mode 100644 index 00000000..b042f0ef --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Resources.cs @@ -0,0 +1,25 @@ +// Copyright (c) Duende Software. All rights reserved. +// See LICENSE in the project root for license information. + + +using Duende.IdentityServer.Models; +using System.Collections.Generic; + +namespace IdentityServerHost; + +public static class Resources +{ + public static IEnumerable Identity => + new IdentityResource[] + { + new IdentityResources.OpenId(), + new IdentityResources.Profile(), + }; + + public static IEnumerable ApiScopes => + new ApiScope[] + { + new ApiScope("scope1"), + new ApiScope("scope2"), + }; +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Startup.cs b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Startup.cs new file mode 100644 index 00000000..a6a2e7ba --- /dev/null +++ b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/Startup.cs @@ -0,0 +1,62 @@ +// Copyright (c) Duende Software. All rights reserved. +// See LICENSE in the project root for license information. + + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace IdentityServerHost; + +public class Startup +{ + public IWebHostEnvironment Environment { get; } + public IConfiguration Configuration { get; } + + public Startup(IWebHostEnvironment environment, IConfiguration configuration) + { + Environment = environment; + Configuration = configuration; + } + + public void ConfigureServices(IServiceCollection services) + { + services.AddRazorPages(); + + var builder = services.AddIdentityServer(options => + { + options.Events.RaiseErrorEvents = true; + options.Events.RaiseInformationEvents = true; + options.Events.RaiseFailureEvents = true; + options.Events.RaiseSuccessEvents = true; + + // see https://docs.duendesoftware.com/identityserver/v5/basics/resources + options.EmitStaticAudienceClaim = true; + }) + .AddTestUsers(TestUsers.Users); + + builder.AddInMemoryIdentityResources(Resources.Identity); + builder.AddInMemoryApiScopes(Resources.ApiScopes); + builder.AddInMemoryClients(Clients.List); + } + + public void Configure(IApplicationBuilder app) + { + if (Environment.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); + } + + app.UseStaticFiles(); + + app.UseRouting(); + app.UseIdentityServer(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapRazorPages(); + }); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.scss b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.scss old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/css/site.scss rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/css/site.scss diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/duende-logo.svg b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/duende-logo.svg old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/duende-logo.svg rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/duende-logo.svg diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/favicon.ico b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/favicon.ico old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/favicon.ico rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/favicon.ico diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/js/signin-redirect.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/js/signin-redirect.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/js/signin-redirect.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/js/signin-redirect.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/js/signout-redirect.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/js/signout-redirect.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/js/signout-redirect.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/js/signout-redirect.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/LICENSE b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/LICENSE rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/LICENSE diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/README.md b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/README.md old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/README.md rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/README.md diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/LICENSE b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/LICENSE rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/LICENSE diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/css/bootstrap-glyphicons.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.eot b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.eot old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.eot rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.eot diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.svg b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.svg old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.svg rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.svg diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.ttf b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.ttf old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.ttf rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.ttf diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff2 b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff2 old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff2 rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/fonts/glyphicons/glyphicons-halflings-regular.woff2 diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.less b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.less old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.less rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.less diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.min.css b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.min.css rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/bootstrap4-glyphicons/maps/glyphicons-fontawesome.min.css diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/LICENSE.txt b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/LICENSE.txt rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/LICENSE.txt diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/README.md b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/README.md old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/README.md rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/README.md diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.min.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.min.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.min.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.min.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.min.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.min.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.min.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.min.js b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.min.js rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.min.js diff --git a/IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.min.map b/IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.min.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/Ciba/IdentityServer/wwwroot/lib/jquery/dist/jquery.slim.min.map rename to IdentityServer/v7/UserInteraction/Ciba/IdentityServerHost/wwwroot/lib/jquery/dist/jquery.slim.min.map diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Constants.cs b/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Constants.cs deleted file mode 100755 index 5a07a505..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Constants.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Clients -{ - public class Constants - { - public const string Authority = "https://localhost:5001"; - public const string SampleApi = "https://localhost:5005/"; - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/IdentityController.cs b/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/IdentityController.cs deleted file mode 100755 index 38812ac3..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/IdentityController.cs +++ /dev/null @@ -1,28 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using System.Linq; - -namespace SampleApi.Controllers -{ - [Route("identity")] - public class IdentityController : ControllerBase - { - private readonly ILogger _logger; - - public IdentityController(ILogger logger) - { - _logger = logger; - } - - // this action simply echoes the claims back to the client - [HttpGet] - public ActionResult Get() - { - var claims = User.Claims.Select(c => new { c.Type, c.Value }); - _logger.LogInformation("claims: {claims}", claims); - - return new JsonResult(claims); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Program.cs b/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Program.cs deleted file mode 100755 index 44fe9c6a..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Program.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using Serilog; -using Serilog.Events; -using Serilog.Sinks.SystemConsole.Themes; - -namespace SampleApi -{ - public class Program - { - public static void Main(string[] args) - { - Console.Title = "Sample API"; - - BuildWebHost(args).Run(); - } - - public static IWebHost BuildWebHost(string[] args) - { - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Verbose() - .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) - .MinimumLevel.Override("System", LogEventLevel.Warning) - .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information) - .Enrich.FromLogContext() - .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) - .CreateLogger(); - - return WebHost.CreateDefaultBuilder(args) - .UseStartup() - .UseSerilog() - .Build(); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Startup.cs b/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Startup.cs deleted file mode 100755 index 7c38fff8..00000000 --- a/IdentityServer/v7/UserInteraction/Ciba/SimpleApi/Startup.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.IdentityModel.Tokens.Jwt; -using Clients; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; - - -namespace SampleApi -{ - public class Startup - { - public Startup() - { - JwtSecurityTokenHandler.DefaultMapInboundClaims = false; - } - - public void ConfigureServices(IServiceCollection services) - { - services.AddControllers(); - - // this API will accept any access token from the authority - services.AddAuthentication("token") - .AddJwtBearer("token", options => - { - options.Authority = Constants.Authority; - options.TokenValidationParameters.ValidateAudience = false; - - options.TokenValidationParameters.ValidTypes = new[] { "at+jwt" }; - }); - } - - public void Configure(IApplicationBuilder app) - { - app.UseRouting(); - app.UseAuthentication(); - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - endpoints.MapControllers().RequireAuthorization(); - }); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/launch.json b/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/launch.json new file mode 100644 index 00000000..a20c2e5e --- /dev/null +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/launch.json @@ -0,0 +1,45 @@ +{ + "version": "0.2.0", + "compounds": [ + { + "name": "Run All", + "configurations": ["Client","IdentityServerHost"], + "presentation": { + "group": "10-compounds", + "order": 1 + } + } + ], + "configurations": [ + { + "name": "IdentityServerHost", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-identityserver", + "program": "${workspaceFolder}/IdentityServerHost/bin/Debug/net8.0/IdentityServerHost.dll", + "args": [], + "cwd": "${workspaceFolder}/IdentityServerHost", + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "console": "externalTerminal" + }, + { + "name": "Client", + "type": "coreclr", + "request": "launch", + "preLaunchTask": "build-client", + "program": "${workspaceFolder}/Client/bin/Debug/net8.0/Client.dll", + "args": [], + "cwd": "${workspaceFolder}/Client", + "serverReadyAction": { + "action": "openExternally", + "pattern": "\\bNow listening on:\\s+(https?://\\S+)" + }, + "env": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "console": "externalTerminal" + } + ] +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/tasks.json b/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/tasks.json new file mode 100644 index 00000000..780ae2a2 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/.vscode/tasks.json @@ -0,0 +1,29 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-identityserver", + "type": "process", + "command": "dotnet", + "args": [ + "build", + "${workspaceFolder}/IdentityServerHost/IdentityServerHost.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + }, + { + "label": "build-client", + "type": "process", + "command": "dotnet", + "args": [ + "build", + "${workspaceFolder}/Client/Client.csproj", + "/property:GenerateFullPaths=true", + "/consoleloggerparameters:NoSummary" + ], + "problemMatcher": "$msCompile" + } + ] +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/MvcClient.csproj b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Client.csproj old mode 100755 new mode 100644 similarity index 77% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/MvcClient.csproj rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Client.csproj index 487581a5..58c24a47 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/MvcClient.csproj +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Client.csproj @@ -1,12 +1,12 @@  - net6.0 + net8.0 - + diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Controllers/HomeController.cs b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Controllers/HomeController.cs new file mode 100644 index 00000000..072519b2 --- /dev/null +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Controllers/HomeController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Client.Controllers; + +public class HomeController : Controller +{ + [AllowAnonymous] + public IActionResult Index() => View(); + + public IActionResult Secure() => View(); + + public IActionResult Logout() => SignOut("oidc"); +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Program.cs b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Program.cs new file mode 100644 index 00000000..5f6652af --- /dev/null +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Program.cs @@ -0,0 +1,22 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using System; + +namespace Client; + +public class Program +{ + public static void Main(string[] args) + { + Console.Title = "Client"; + + CreateHostBuilder(args).Build().Run(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); +} diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Properties/launchSettings.json b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Properties/launchSettings.json similarity index 100% rename from IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Properties/launchSettings.json rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Properties/launchSettings.json diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Startup.cs b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Startup.cs new file mode 100644 index 00000000..77e6ffcc --- /dev/null +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Startup.cs @@ -0,0 +1,77 @@ +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Tokens; +using System.IdentityModel.Tokens.Jwt; +using System.Net.Http; +using IdentityModel.Client; +using System.Threading.Tasks; + +namespace Client; + +public class Startup +{ + public void ConfigureServices(IServiceCollection services) + { + JwtSecurityTokenHandler.DefaultMapInboundClaims = false; + + services.AddControllersWithViews(); + + services.AddAuthentication(options => + { + options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = "oidc"; + }) + .AddCookie(options => + { + options.Cookie.Name = "mvcbasic"; + }) + .AddOpenIdConnect("oidc", options => + { + options.Authority = "https://localhost:5001"; + options.RequireHttpsMetadata = false; + + options.ClientId = "interactive"; + options.ClientSecret = "49C1A7E1-0C79-4A89-A3D6-A37998FB86B0"; + + // code flow + PKCE (PKCE is turned on by default) + options.ResponseType = "code"; + options.UsePkce = true; + + options.Scope.Clear(); + options.Scope.Add("openid"); + options.Scope.Add("profile"); + + // not mapped by default + options.ClaimActions.MapJsonKey("website", "website"); + + // keeps id_token smaller + options.GetClaimsFromUserInfoEndpoint = true; + options.SaveTokens = true; + + options.TokenValidationParameters = new TokenValidationParameters + { + NameClaimType = "name", + RoleClaimType = "role" + }; + }); + } + + public void Configure(IApplicationBuilder app) + { + app.UseDeveloperExceptionPage(); + app.UseStaticFiles(); + + app.UseRouting(); + + app.UseAuthentication(); + app.UseAuthorization(); + + app.UseEndpoints(endpoints => + { + endpoints.MapDefaultControllerRoute() + .RequireAuthorization(); + }); + } +} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Home/Index.cshtml b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Home/Index.cshtml similarity index 100% rename from IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Home/Index.cshtml rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Home/Index.cshtml diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Home/Secure.cshtml b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Home/Secure.cshtml similarity index 100% rename from IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Home/Secure.cshtml rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Home/Secure.cshtml diff --git a/IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Shared/Error.cshtml b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Shared/Error.cshtml similarity index 100% rename from IdentityServer/v7/UserInteraction/DynamicProviders/MvcClient/Views/Shared/Error.cshtml rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Shared/Error.cshtml diff --git a/IdentityServer/v7/UserInteraction/SpaLoginUi/MvcClient/Views/Shared/_Layout.cshtml b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Shared/_Layout.cshtml old mode 100755 new mode 100644 similarity index 95% rename from IdentityServer/v7/UserInteraction/SpaLoginUi/MvcClient/Views/Shared/_Layout.cshtml rename to IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Shared/_Layout.cshtml index 173783f6..59c2ee93 --- a/IdentityServer/v7/UserInteraction/SpaLoginUi/MvcClient/Views/Shared/_Layout.cshtml +++ b/IdentityServer/v7/UserInteraction/DynamicProviders/Client/Views/Shared/_Layout.cshtml @@ -3,7 +3,7 @@ - @ViewData["Title"] - Mvc Client + @ViewData["Title"] - Dynamic Providers @@ -11,7 +11,7 @@
+
+
+
+ @RenderBody() +
+
+ + + + + @RenderSection("Scripts", required: false) + + diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/Shared/_ValidationScriptsPartial.cshtml b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/Shared/_ValidationScriptsPartial.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/Shared/_ValidationScriptsPartial.cshtml rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/Shared/_ValidationScriptsPartial.cshtml diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/_ViewImports.cshtml b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/_ViewImports.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/_ViewImports.cshtml rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/_ViewImports.cshtml diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/_ViewStart.cshtml b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/_ViewStart.cshtml old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/_ViewStart.cshtml rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/Views/_ViewStart.cshtml diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/css/site.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/css/site.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/css/site.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/css/site.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/favicon.ico b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/favicon.ico old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/favicon.ico rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/favicon.ico diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/js/site.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/js/site.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/js/site.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/js/site.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/LICENSE b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/LICENSE rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/LICENSE diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-grid.min.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap-reboot.min.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/css/bootstrap.min.css.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.js.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.bundle.min.js.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.js.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/bootstrap/dist/js/bootstrap.min.js.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/LICENSE.txt diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/LICENSE.md b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/LICENSE.md old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/LICENSE.md rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/LICENSE.md diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/additional-methods.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/additional-methods.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/additional-methods.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/additional-methods.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/additional-methods.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/additional-methods.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/additional-methods.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/additional-methods.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/jquery.validate.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/jquery.validate.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/jquery.validate.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/jquery.validate.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery-validation/dist/jquery.validate.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/LICENSE.txt b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/LICENSE.txt old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/LICENSE.txt rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/LICENSE.txt diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.min.js b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.min.js old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.min.js rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.min.js diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.min.map b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.min.map old mode 100755 new mode 100644 similarity index 100% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/wwwroot/lib/jquery/dist/jquery.min.map rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/Client/wwwroot/lib/jquery/dist/jquery.min.map diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Config.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Config.cs index 70c55f79..ffdc9d95 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Config.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Config.cs @@ -5,54 +5,53 @@ using Duende.IdentityServer.Models; using System.Collections.Generic; -namespace IdentityServerHost +namespace IdentityServerHost; + +public static class Config { - public static class Config - { - public static IEnumerable IdentityResources => - new IdentityResource[] + public static IEnumerable IdentityResources => + new IdentityResource[] + { + new IdentityResources.OpenId(), + new IdentityResources.Profile(), + }; + + public static IEnumerable ApiScopes => + new ApiScope[] + { + new ApiScope("scope1"), + new ApiScope("scope2"), + }; + + public static IEnumerable Clients => + new Client[] + { + // m2m client credentials flow client + new Client { - new IdentityResources.OpenId(), - new IdentityResources.Profile(), - }; + ClientId = "m2m.client", + ClientName = "Client Credentials Client", - public static IEnumerable ApiScopes => - new ApiScope[] - { - new ApiScope("scope1"), - new ApiScope("scope2"), - }; + AllowedGrantTypes = GrantTypes.ClientCredentials, + ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) }, + + AllowedScopes = { "scope1" } + }, - public static IEnumerable Clients => - new Client[] + // interactive client using code flow + pkce + new Client { - // m2m client credentials flow client - new Client - { - ClientId = "m2m.client", - ClientName = "Client Credentials Client", - - AllowedGrantTypes = GrantTypes.ClientCredentials, - ClientSecrets = { new Secret("511536EF-F270-4058-80CA-1C89C192F69A".Sha256()) }, - - AllowedScopes = { "scope1" } - }, - - // interactive client using code flow + pkce - new Client - { - ClientId = "interactive", - ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) }, - - AllowedGrantTypes = GrantTypes.Code, - - RedirectUris = { "https://localhost:44300/signin-oidc" }, - FrontChannelLogoutUri = "https://localhost:44300/signout-oidc", - PostLogoutRedirectUris = { "https://localhost:44300/signout-callback-oidc" }, - - AllowOfflineAccess = true, - AllowedScopes = { "openid", "profile", "scope2" } - }, - }; - } + ClientId = "interactive", + ClientSecrets = { new Secret("49C1A7E1-0C79-4A89-A3D6-A37998FB86B0".Sha256()) }, + + AllowedGrantTypes = GrantTypes.Code, + + RedirectUris = { "https://localhost:44300/signin-oidc" }, + FrontChannelLogoutUri = "https://localhost:44300/signout-oidc", + PostLogoutRedirectUris = { "https://localhost:44300/signout-callback-oidc" }, + + AllowOfflineAccess = true, + AllowedScopes = { "openid", "profile", "scope2" } + }, + }; } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/IdentityServerHost.csproj b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/IdentityServerHost.csproj index 876e711f..f5f09a1a 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/IdentityServerHost.csproj +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/IdentityServerHost.csproj @@ -1,23 +1,28 @@ - net6.0 + net8.0 - + - + - - + + - - - + + + all runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb.sql b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb.sql index 06d4e158..bed1554a 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb.sql +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb.sql @@ -52,6 +52,9 @@ CREATE TABLE "Clients" ( "AllowPlainTextPkce" INTEGER NOT NULL, "RequireRequestObject" INTEGER NOT NULL, "AllowAccessTokensViaBrowser" INTEGER NOT NULL, + "RequireDPoP" INTEGER NOT NULL, + "DPoPValidationMode" INTEGER NOT NULL, + "DPoPClockSkew" TEXT NOT NULL, "FrontChannelLogoutUri" TEXT NULL, "FrontChannelLogoutSessionRequired" INTEGER NOT NULL, "BackChannelLogoutUri" TEXT NULL, @@ -73,15 +76,19 @@ CREATE TABLE "Clients" ( "AlwaysSendClientClaims" INTEGER NOT NULL, "ClientClaimsPrefix" TEXT NULL, "PairWiseSubjectSalt" TEXT NULL, + "InitiateLoginUri" TEXT NULL, "UserSsoLifetime" INTEGER NULL, "UserCodeType" TEXT NULL, "DeviceCodeLifetime" INTEGER NOT NULL, "CibaLifetime" INTEGER NULL, "PollingInterval" INTEGER NULL, + "CoordinateLifetimeWithUserSession" INTEGER NULL, "Created" TEXT NOT NULL, "Updated" TEXT NULL, "LastAccessed" TEXT NULL, - "NonEditable" INTEGER NOT NULL + "NonEditable" INTEGER NOT NULL, + "PushedAuthorizationLifetime" INTEGER NULL, + "RequirePushedAuthorization" INTEGER NOT NULL ); CREATE TABLE "IdentityProviders" ( @@ -288,7 +295,7 @@ CREATE UNIQUE INDEX "IX_IdentityResourceProperties_IdentityResourceId_Key" ON "I CREATE UNIQUE INDEX "IX_IdentityResources_Name" ON "IdentityResources" ("Name"); INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220104195549_Configuration', '6.0.0'); +VALUES ('20240119204225_Configuration', '8.0.1'); COMMIT; diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.Designer.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.Designer.cs similarity index 97% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.Designer.cs rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.Designer.cs index 0d10ec1c..9ca65a7c 100644 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.Designer.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.Designer.cs @@ -11,13 +11,14 @@ namespace IdentityServerHost.Migrations.ConfigurationDb { [DbContext(typeof(ConfigurationDbContext))] - [Migration("20220104195549_Configuration")] + [Migration("20240119204225_Configuration")] partial class Configuration { + /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "6.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.ApiResource", b => { @@ -348,9 +349,18 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("ConsentLifetime") .HasColumnType("INTEGER"); + b.Property("CoordinateLifetimeWithUserSession") + .HasColumnType("INTEGER"); + b.Property("Created") .HasColumnType("TEXT"); + b.Property("DPoPClockSkew") + .HasColumnType("TEXT"); + + b.Property("DPoPValidationMode") + .HasColumnType("INTEGER"); + b.Property("Description") .HasMaxLength(1000) .HasColumnType("TEXT"); @@ -377,6 +387,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("IncludeJwtId") .HasColumnType("INTEGER"); + b.Property("InitiateLoginUri") + .HasMaxLength(2000) + .HasColumnType("TEXT"); + b.Property("LastAccessed") .HasColumnType("TEXT"); @@ -399,6 +413,9 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("PushedAuthorizationLifetime") + .HasColumnType("INTEGER"); + b.Property("RefreshTokenExpiration") .HasColumnType("INTEGER"); @@ -411,9 +428,15 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("RequireConsent") .HasColumnType("INTEGER"); + b.Property("RequireDPoP") + .HasColumnType("INTEGER"); + b.Property("RequirePkce") .HasColumnType("INTEGER"); + b.Property("RequirePushedAuthorization") + .HasColumnType("INTEGER"); + b.Property("RequireRequestObject") .HasColumnType("INTEGER"); diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.cs similarity index 97% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.cs rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.cs index 751477f0..972e7959 100644 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20220104195549_Configuration.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/20240119204225_Configuration.cs @@ -5,8 +5,10 @@ namespace IdentityServerHost.Migrations.ConfigurationDb { + /// public partial class Configuration : Migration { + /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( @@ -76,6 +78,9 @@ protected override void Up(MigrationBuilder migrationBuilder) AllowPlainTextPkce = table.Column(type: "INTEGER", nullable: false), RequireRequestObject = table.Column(type: "INTEGER", nullable: false), AllowAccessTokensViaBrowser = table.Column(type: "INTEGER", nullable: false), + RequireDPoP = table.Column(type: "INTEGER", nullable: false), + DPoPValidationMode = table.Column(type: "INTEGER", nullable: false), + DPoPClockSkew = table.Column(type: "TEXT", nullable: false), FrontChannelLogoutUri = table.Column(type: "TEXT", maxLength: 2000, nullable: true), FrontChannelLogoutSessionRequired = table.Column(type: "INTEGER", nullable: false), BackChannelLogoutUri = table.Column(type: "TEXT", maxLength: 2000, nullable: true), @@ -97,15 +102,19 @@ protected override void Up(MigrationBuilder migrationBuilder) AlwaysSendClientClaims = table.Column(type: "INTEGER", nullable: false), ClientClaimsPrefix = table.Column(type: "TEXT", maxLength: 200, nullable: true), PairWiseSubjectSalt = table.Column(type: "TEXT", maxLength: 200, nullable: true), + InitiateLoginUri = table.Column(type: "TEXT", maxLength: 2000, nullable: true), UserSsoLifetime = table.Column(type: "INTEGER", nullable: true), UserCodeType = table.Column(type: "TEXT", maxLength: 100, nullable: true), DeviceCodeLifetime = table.Column(type: "INTEGER", nullable: false), CibaLifetime = table.Column(type: "INTEGER", nullable: true), PollingInterval = table.Column(type: "INTEGER", nullable: true), + CoordinateLifetimeWithUserSession = table.Column(type: "INTEGER", nullable: true), Created = table.Column(type: "TEXT", nullable: false), Updated = table.Column(type: "TEXT", nullable: true), LastAccessed = table.Column(type: "TEXT", nullable: true), - NonEditable = table.Column(type: "INTEGER", nullable: false) + NonEditable = table.Column(type: "INTEGER", nullable: false), + PushedAuthorizationLifetime = table.Column(type: "INTEGER", nullable: true), + RequirePushedAuthorization = table.Column(type: "INTEGER", nullable: false) }, constraints: table => { @@ -639,6 +648,7 @@ protected override void Up(MigrationBuilder migrationBuilder) unique: true); } + /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs index 93a7e78c..95de5f73 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ partial class ConfigurationDbContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "6.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.ApiResource", b => { @@ -346,9 +346,18 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("ConsentLifetime") .HasColumnType("INTEGER"); + b.Property("CoordinateLifetimeWithUserSession") + .HasColumnType("INTEGER"); + b.Property("Created") .HasColumnType("TEXT"); + b.Property("DPoPClockSkew") + .HasColumnType("TEXT"); + + b.Property("DPoPValidationMode") + .HasColumnType("INTEGER"); + b.Property("Description") .HasMaxLength(1000) .HasColumnType("TEXT"); @@ -375,6 +384,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("IncludeJwtId") .HasColumnType("INTEGER"); + b.Property("InitiateLoginUri") + .HasMaxLength(2000) + .HasColumnType("TEXT"); + b.Property("LastAccessed") .HasColumnType("TEXT"); @@ -397,6 +410,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(200) .HasColumnType("TEXT"); + b.Property("PushedAuthorizationLifetime") + .HasColumnType("INTEGER"); + b.Property("RefreshTokenExpiration") .HasColumnType("INTEGER"); @@ -409,9 +425,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("RequireConsent") .HasColumnType("INTEGER"); + b.Property("RequireDPoP") + .HasColumnType("INTEGER"); + b.Property("RequirePkce") .HasColumnType("INTEGER"); + b.Property("RequirePushedAuthorization") + .HasColumnType("INTEGER"); + b.Property("RequireRequestObject") .HasColumnType("INTEGER"); diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb.sql b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb.sql index db777492..e12e6208 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb.sql +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb.sql @@ -29,7 +29,8 @@ CREATE TABLE "Keys" ( ); CREATE TABLE "PersistedGrants" ( - "Key" TEXT NOT NULL CONSTRAINT "PK_PersistedGrants" PRIMARY KEY, + "Id" INTEGER NOT NULL CONSTRAINT "PK_PersistedGrants" PRIMARY KEY AUTOINCREMENT, + "Key" TEXT NULL, "Type" TEXT NOT NULL, "SubjectId" TEXT NULL, "SessionId" TEXT NULL, @@ -41,6 +42,26 @@ CREATE TABLE "PersistedGrants" ( "Data" TEXT NOT NULL ); +CREATE TABLE "PushedAuthorizationRequests" ( + "Id" INTEGER NOT NULL CONSTRAINT "PK_PushedAuthorizationRequests" PRIMARY KEY AUTOINCREMENT, + "ReferenceValueHash" TEXT NOT NULL, + "ExpiresAtUtc" TEXT NOT NULL, + "Parameters" TEXT NOT NULL +); + +CREATE TABLE "ServerSideSessions" ( + "Id" INTEGER NOT NULL CONSTRAINT "PK_ServerSideSessions" PRIMARY KEY AUTOINCREMENT, + "Key" TEXT NOT NULL, + "Scheme" TEXT NOT NULL, + "SubjectId" TEXT NOT NULL, + "SessionId" TEXT NULL, + "DisplayName" TEXT NULL, + "Created" TEXT NOT NULL, + "Renewed" TEXT NOT NULL, + "Expires" TEXT NULL, + "Data" TEXT NOT NULL +); + CREATE UNIQUE INDEX "IX_DeviceCodes_DeviceCode" ON "DeviceCodes" ("DeviceCode"); CREATE INDEX "IX_DeviceCodes_Expiration" ON "DeviceCodes" ("Expiration"); @@ -51,12 +72,28 @@ CREATE INDEX "IX_PersistedGrants_ConsumedTime" ON "PersistedGrants" ("ConsumedTi CREATE INDEX "IX_PersistedGrants_Expiration" ON "PersistedGrants" ("Expiration"); +CREATE UNIQUE INDEX "IX_PersistedGrants_Key" ON "PersistedGrants" ("Key"); + CREATE INDEX "IX_PersistedGrants_SubjectId_ClientId_Type" ON "PersistedGrants" ("SubjectId", "ClientId", "Type"); CREATE INDEX "IX_PersistedGrants_SubjectId_SessionId_Type" ON "PersistedGrants" ("SubjectId", "SessionId", "Type"); +CREATE INDEX "IX_PushedAuthorizationRequests_ExpiresAtUtc" ON "PushedAuthorizationRequests" ("ExpiresAtUtc"); + +CREATE UNIQUE INDEX "IX_PushedAuthorizationRequests_ReferenceValueHash" ON "PushedAuthorizationRequests" ("ReferenceValueHash"); + +CREATE INDEX "IX_ServerSideSessions_DisplayName" ON "ServerSideSessions" ("DisplayName"); + +CREATE INDEX "IX_ServerSideSessions_Expires" ON "ServerSideSessions" ("Expires"); + +CREATE UNIQUE INDEX "IX_ServerSideSessions_Key" ON "ServerSideSessions" ("Key"); + +CREATE INDEX "IX_ServerSideSessions_SessionId" ON "ServerSideSessions" ("SessionId"); + +CREATE INDEX "IX_ServerSideSessions_SubjectId" ON "ServerSideSessions" ("SubjectId"); + INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") -VALUES ('20220104195544_Grants', '6.0.0'); +VALUES ('20240119204221_Grants', '8.0.1'); COMMIT; diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.Designer.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.Designer.cs similarity index 62% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.Designer.cs rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.Designer.cs index 2c299a96..dac45ca3 100644 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.Designer.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.Designer.cs @@ -11,13 +11,14 @@ namespace IdentityServerHost.Migrations.PersistedGrantDb { [DbContext(typeof(PersistedGrantDbContext))] - [Migration("20220104195544_Grants")] + [Migration("20240119204221_Grants")] partial class Grants { + /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "6.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.DeviceFlowCodes", b => { @@ -107,9 +108,9 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PersistedGrant", b => { - b.Property("Key") - .HasMaxLength(200) - .HasColumnType("TEXT"); + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); b.Property("ClientId") .IsRequired() @@ -134,6 +135,10 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.Property("Expiration") .HasColumnType("TEXT"); + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("TEXT"); + b.Property("SessionId") .HasMaxLength(100) .HasColumnType("TEXT"); @@ -147,18 +152,107 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("TEXT"); - b.HasKey("Key"); + b.HasKey("Id"); b.HasIndex("ConsumedTime"); b.HasIndex("Expiration"); + b.HasIndex("Key") + .IsUnique(); + b.HasIndex("SubjectId", "ClientId", "Type"); b.HasIndex("SubjectId", "SessionId", "Type"); b.ToTable("PersistedGrants", (string)null); }); + + modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PushedAuthorizationRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ExpiresAtUtc") + .HasColumnType("TEXT"); + + b.Property("Parameters") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ReferenceValueHash") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ExpiresAtUtc"); + + b.HasIndex("ReferenceValueHash") + .IsUnique(); + + b.ToTable("PushedAuthorizationRequests", (string)null); + }); + + modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.ServerSideSession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DisplayName") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Expires") + .HasColumnType("TEXT"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Renewed") + .HasColumnType("TEXT"); + + b.Property("Scheme") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("SubjectId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.HasIndex("Expires"); + + b.HasIndex("Key") + .IsUnique(); + + b.HasIndex("SessionId"); + + b.HasIndex("SubjectId"); + + b.ToTable("ServerSideSessions", (string)null); + }); #pragma warning restore 612, 618 } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.cs similarity index 56% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.cs rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.cs index 6a076555..24e34c01 100644 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20220104195544_Grants.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/20240119204221_Grants.cs @@ -5,8 +5,10 @@ namespace IdentityServerHost.Migrations.PersistedGrantDb { + /// public partial class Grants : Migration { + /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( @@ -50,7 +52,9 @@ protected override void Up(MigrationBuilder migrationBuilder) name: "PersistedGrants", columns: table => new { - Key = table.Column(type: "TEXT", maxLength: 200, nullable: false), + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Key = table.Column(type: "TEXT", maxLength: 200, nullable: true), Type = table.Column(type: "TEXT", maxLength: 50, nullable: false), SubjectId = table.Column(type: "TEXT", maxLength: 200, nullable: true), SessionId = table.Column(type: "TEXT", maxLength: 100, nullable: true), @@ -63,7 +67,43 @@ protected override void Up(MigrationBuilder migrationBuilder) }, constraints: table => { - table.PrimaryKey("PK_PersistedGrants", x => x.Key); + table.PrimaryKey("PK_PersistedGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "PushedAuthorizationRequests", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + ReferenceValueHash = table.Column(type: "TEXT", maxLength: 64, nullable: false), + ExpiresAtUtc = table.Column(type: "TEXT", nullable: false), + Parameters = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_PushedAuthorizationRequests", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "ServerSideSessions", + columns: table => new + { + Id = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + Key = table.Column(type: "TEXT", maxLength: 100, nullable: false), + Scheme = table.Column(type: "TEXT", maxLength: 100, nullable: false), + SubjectId = table.Column(type: "TEXT", maxLength: 100, nullable: false), + SessionId = table.Column(type: "TEXT", maxLength: 100, nullable: true), + DisplayName = table.Column(type: "TEXT", maxLength: 100, nullable: true), + Created = table.Column(type: "TEXT", nullable: false), + Renewed = table.Column(type: "TEXT", nullable: false), + Expires = table.Column(type: "TEXT", nullable: true), + Data = table.Column(type: "TEXT", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_ServerSideSessions", x => x.Id); }); migrationBuilder.CreateIndex( @@ -92,6 +132,12 @@ protected override void Up(MigrationBuilder migrationBuilder) table: "PersistedGrants", column: "Expiration"); + migrationBuilder.CreateIndex( + name: "IX_PersistedGrants_Key", + table: "PersistedGrants", + column: "Key", + unique: true); + migrationBuilder.CreateIndex( name: "IX_PersistedGrants_SubjectId_ClientId_Type", table: "PersistedGrants", @@ -101,8 +147,46 @@ protected override void Up(MigrationBuilder migrationBuilder) name: "IX_PersistedGrants_SubjectId_SessionId_Type", table: "PersistedGrants", columns: new[] { "SubjectId", "SessionId", "Type" }); + + migrationBuilder.CreateIndex( + name: "IX_PushedAuthorizationRequests_ExpiresAtUtc", + table: "PushedAuthorizationRequests", + column: "ExpiresAtUtc"); + + migrationBuilder.CreateIndex( + name: "IX_PushedAuthorizationRequests_ReferenceValueHash", + table: "PushedAuthorizationRequests", + column: "ReferenceValueHash", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ServerSideSessions_DisplayName", + table: "ServerSideSessions", + column: "DisplayName"); + + migrationBuilder.CreateIndex( + name: "IX_ServerSideSessions_Expires", + table: "ServerSideSessions", + column: "Expires"); + + migrationBuilder.CreateIndex( + name: "IX_ServerSideSessions_Key", + table: "ServerSideSessions", + column: "Key", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_ServerSideSessions_SessionId", + table: "ServerSideSessions", + column: "SessionId"); + + migrationBuilder.CreateIndex( + name: "IX_ServerSideSessions_SubjectId", + table: "ServerSideSessions", + column: "SubjectId"); } + /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( @@ -113,6 +197,12 @@ protected override void Down(MigrationBuilder migrationBuilder) migrationBuilder.DropTable( name: "PersistedGrants"); + + migrationBuilder.DropTable( + name: "PushedAuthorizationRequests"); + + migrationBuilder.DropTable( + name: "ServerSideSessions"); } } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs index c1762881..77718033 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Migrations/PersistedGrantDb/PersistedGrantDbContextModelSnapshot.cs @@ -15,7 +15,7 @@ partial class PersistedGrantDbContextModelSnapshot : ModelSnapshot protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 - modelBuilder.HasAnnotation("ProductVersion", "6.0.0"); + modelBuilder.HasAnnotation("ProductVersion", "8.0.1"); modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.DeviceFlowCodes", b => { @@ -105,9 +105,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PersistedGrant", b => { - b.Property("Key") - .HasMaxLength(200) - .HasColumnType("TEXT"); + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); b.Property("ClientId") .IsRequired() @@ -132,6 +132,10 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Expiration") .HasColumnType("TEXT"); + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("TEXT"); + b.Property("SessionId") .HasMaxLength(100) .HasColumnType("TEXT"); @@ -145,18 +149,107 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(50) .HasColumnType("TEXT"); - b.HasKey("Key"); + b.HasKey("Id"); b.HasIndex("ConsumedTime"); b.HasIndex("Expiration"); + b.HasIndex("Key") + .IsUnique(); + b.HasIndex("SubjectId", "ClientId", "Type"); b.HasIndex("SubjectId", "SessionId", "Type"); b.ToTable("PersistedGrants", (string)null); }); + + modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.PushedAuthorizationRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("ExpiresAtUtc") + .HasColumnType("TEXT"); + + b.Property("Parameters") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("ReferenceValueHash") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("ExpiresAtUtc"); + + b.HasIndex("ReferenceValueHash") + .IsUnique(); + + b.ToTable("PushedAuthorizationRequests", (string)null); + }); + + modelBuilder.Entity("Duende.IdentityServer.EntityFramework.Entities.ServerSideSession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("Created") + .HasColumnType("TEXT"); + + b.Property("Data") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("DisplayName") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Expires") + .HasColumnType("TEXT"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("Renewed") + .HasColumnType("TEXT"); + + b.Property("Scheme") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.Property("SubjectId") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("TEXT"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.HasIndex("Expires"); + + b.HasIndex("Key") + .IsUnique(); + + b.HasIndex("SessionId"); + + b.HasIndex("SubjectId"); + + b.ToTable("ServerSideSessions", (string)null); + }); #pragma warning restore 612, 618 } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Pages/SecurityHeadersAttribute.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Pages/SecurityHeadersAttribute.cs index 09081724..36f9dbd7 100644 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Pages/SecurityHeadersAttribute.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Pages/SecurityHeadersAttribute.cs @@ -2,6 +2,7 @@ // See LICENSE in the project root for license information. +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc.RazorPages; @@ -17,13 +18,13 @@ public override void OnResultExecuting(ResultExecutingContext context) // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Type-Options")) { - context.HttpContext.Response.Headers.Add("X-Content-Type-Options", "nosniff"); + context.HttpContext.Response.Headers.Append("X-Content-Type-Options", "nosniff"); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options if (!context.HttpContext.Response.Headers.ContainsKey("X-Frame-Options")) { - context.HttpContext.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); + context.HttpContext.Response.Headers.Append("X-Frame-Options", "SAMEORIGIN"); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy @@ -36,19 +37,19 @@ public override void OnResultExecuting(ResultExecutingContext context) // once for standards compliant browsers if (!context.HttpContext.Response.Headers.ContainsKey("Content-Security-Policy")) { - context.HttpContext.Response.Headers.Add("Content-Security-Policy", csp); + context.HttpContext.Response.Headers.Append("Content-Security-Policy", csp); } // and once again for IE if (!context.HttpContext.Response.Headers.ContainsKey("X-Content-Security-Policy")) { - context.HttpContext.Response.Headers.Add("X-Content-Security-Policy", csp); + context.HttpContext.Response.Headers.Append("X-Content-Security-Policy", csp); } // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy var referrer_policy = "no-referrer"; if (!context.HttpContext.Response.Headers.ContainsKey("Referrer-Policy")) { - context.HttpContext.Response.Headers.Add("Referrer-Policy", referrer_policy); + context.HttpContext.Response.Headers.Append("Referrer-Policy", referrer_policy); } } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Program.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Program.cs index 0f42427c..777347a1 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Program.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Program.cs @@ -12,70 +12,69 @@ using System; using System.Linq; -namespace IdentityServerHost +namespace IdentityServerHost; + +public class Program { - public class Program + public static int Main(string[] args) { - public static int Main(string[] args) - { - Log.Logger = new LoggerConfiguration() - .MinimumLevel.Debug() - .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) - .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) - .MinimumLevel.Override("System", LogEventLevel.Warning) - .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information) - .Enrich.FromLogContext() - // uncomment to write to Azure diagnostics stream - //.WriteTo.File( - // @"D:\home\LogFiles\Application\identityserver.txt", - // fileSizeLimitBytes: 1_000_000, - // rollOnFileSizeLimit: true, - // shared: true, - // flushToDiskInterval: TimeSpan.FromSeconds(1)) - .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) - .CreateLogger(); + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Debug() + .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) + .MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) + .MinimumLevel.Override("System", LogEventLevel.Warning) + .MinimumLevel.Override("Microsoft.AspNetCore.Authentication", LogEventLevel.Information) + .Enrich.FromLogContext() + // uncomment to write to Azure diagnostics stream + //.WriteTo.File( + // @"D:\home\LogFiles\Application\identityserver.txt", + // fileSizeLimitBytes: 1_000_000, + // rollOnFileSizeLimit: true, + // shared: true, + // flushToDiskInterval: TimeSpan.FromSeconds(1)) + .WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}", theme: AnsiConsoleTheme.Code) + .CreateLogger(); - try + try + { + var seed = args.Contains("/seed"); + if (seed) { - var seed = args.Contains("/seed"); - if (seed) - { - args = args.Except(new[] { "/seed" }).ToArray(); - } - - var host = CreateHostBuilder(args).Build(); + args = args.Except(new[] { "/seed" }).ToArray(); + } - if (seed) - { - Log.Information("Seeding database..."); - var config = host.Services.GetRequiredService(); - var connectionString = config.GetConnectionString("DefaultConnection"); - SeedData.EnsureSeedData(connectionString); - Log.Information("Done seeding database."); - return 0; - } + var host = CreateHostBuilder(args).Build(); - Log.Information("Starting host..."); - host.Run(); - return 0; - } - catch (Exception ex) - { - Log.Fatal(ex, "Host terminated unexpectedly."); - return 1; - } - finally + if (seed) { - Log.CloseAndFlush(); + Log.Information("Seeding database..."); + var config = host.Services.GetRequiredService(); + var connectionString = config.GetConnectionString("DefaultConnection"); + SeedData.EnsureSeedData(connectionString); + Log.Information("Done seeding database."); + return 0; } - } - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .UseSerilog() - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); + Log.Information("Starting host..."); + host.Run(); + return 0; + } + catch (Exception ex) + { + Log.Fatal(ex, "Host terminated unexpectedly."); + return 1; + } + finally + { + Log.CloseAndFlush(); + } } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .UseSerilog() + .ConfigureWebHostDefaults(webBuilder => + { + webBuilder.UseStartup(); + }); } \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/SeedData.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/SeedData.cs index 42615341..35681a14 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/SeedData.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/SeedData.cs @@ -1,6 +1,7 @@ // Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. + using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System.Linq; @@ -10,104 +11,102 @@ using Duende.IdentityServer.EntityFramework.Mappers; using Duende.IdentityServer.Models; using System; -using IdentityServerHost.WsFed; -namespace IdentityServerHost +namespace IdentityServerHost; + +public class SeedData { - public class SeedData + public static void EnsureSeedData(string connectionString) { - public static void EnsureSeedData(string connectionString) + var services = new ServiceCollection(); + services.AddOperationalDbContext(options => { - var services = new ServiceCollection(); - services.AddOperationalDbContext(options => - { - options.ConfigureDbContext = db => db.UseSqlite(connectionString, sql => sql.MigrationsAssembly(typeof(SeedData).Assembly.FullName)); - }); - services.AddConfigurationDbContext(options => - { - options.ConfigureDbContext = db => db.UseSqlite(connectionString, sql => sql.MigrationsAssembly(typeof(SeedData).Assembly.FullName)); - }); + options.ConfigureDbContext = db => db.UseSqlite(connectionString, sql => sql.MigrationsAssembly(typeof(SeedData).Assembly.FullName)); + }); + services.AddConfigurationDbContext(options => + { + options.ConfigureDbContext = db => db.UseSqlite(connectionString, sql => sql.MigrationsAssembly(typeof(SeedData).Assembly.FullName)); + }); - var serviceProvider = services.BuildServiceProvider(); + var serviceProvider = services.BuildServiceProvider(); - using (var scope = serviceProvider.GetRequiredService().CreateScope()) - { - scope.ServiceProvider.GetService().Database.Migrate(); + using (var scope = serviceProvider.GetRequiredService().CreateScope()) + { + scope.ServiceProvider.GetService().Database.Migrate(); - var context = scope.ServiceProvider.GetService(); - context.Database.Migrate(); - EnsureSeedData(context); - } + var context = scope.ServiceProvider.GetService(); + context.Database.Migrate(); + EnsureSeedData(context); } + } - private static void EnsureSeedData(ConfigurationDbContext context) + private static void EnsureSeedData(ConfigurationDbContext context) + { + if (!context.Clients.Any()) { - if (!context.Clients.Any()) - { - Log.Debug("Clients being populated"); - foreach (var client in Config.Clients.ToList()) - { - context.Clients.Add(client.ToEntity()); - } - context.SaveChanges(); - } - else + Log.Debug("Clients being populated"); + foreach (var client in Config.Clients.ToList()) { - Log.Debug("Clients already populated"); + context.Clients.Add(client.ToEntity()); } + context.SaveChanges(); + } + else + { + Log.Debug("Clients already populated"); + } - if (!context.IdentityResources.Any()) - { - Log.Debug("IdentityResources being populated"); - foreach (var resource in Config.IdentityResources.ToList()) - { - context.IdentityResources.Add(resource.ToEntity()); - } - context.SaveChanges(); - } - else + if (!context.IdentityResources.Any()) + { + Log.Debug("IdentityResources being populated"); + foreach (var resource in Config.IdentityResources.ToList()) { - Log.Debug("IdentityResources already populated"); + context.IdentityResources.Add(resource.ToEntity()); } + context.SaveChanges(); + } + else + { + Log.Debug("IdentityResources already populated"); + } - if (!context.ApiScopes.Any()) - { - Log.Debug("ApiScopes being populated"); - foreach (var resource in Config.ApiScopes.ToList()) - { - context.ApiScopes.Add(resource.ToEntity()); - } - context.SaveChanges(); - } - else + if (!context.ApiScopes.Any()) + { + Log.Debug("ApiScopes being populated"); + foreach (var resource in Config.ApiScopes.ToList()) { - Log.Debug("ApiScopes already populated"); + context.ApiScopes.Add(resource.ToEntity()); } + context.SaveChanges(); + } + else + { + Log.Debug("ApiScopes already populated"); + } - if (!context.IdentityProviders.Any()) + if (!context.IdentityProviders.Any()) + { + Console.WriteLine("IdentityProviders being populated"); + context.IdentityProviders.Add(new OidcProvider { - Console.WriteLine("IdentityProviders being populated"); - context.IdentityProviders.Add(new OidcProvider - { - Scheme = "demoidsrv", - DisplayName = "IdentityServer", - Authority = "https://demo.duendesoftware.com", - ClientId = "login", - }.ToEntity()); + Scheme = "demoidsrv", + DisplayName = "IdentityServer", + Authority = "https://demo.duendesoftware.com", + ClientId = "login", + }.ToEntity()); - context.IdentityProviders.Add(new WsFedProvider - { - Scheme = "adfs", - DisplayName = "Local ADFS", - MetadataAddress = "https://adfs4.local/federationmetadata/2007-06/federationmetadata.xml", - RelyingPartyId = "urn:test", - }.ToEntity()); - context.SaveChanges(); - } - else + context.IdentityProviders.Add(new WsFedProvider { - Console.WriteLine("OidcIdentityProviders already populated"); - } + Scheme = "adfs", + DisplayName = "Local ADFS", + MetadataAddress = "https://adfs4.local/federationmetadata/2007-06/federationmetadata.xml", + RelyingPartyId = "urn:test", + }.ToEntity()); + context.SaveChanges(); + } + else + { + Console.WriteLine("OidcIdentityProviders already populated"); } } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Startup.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Startup.cs index 80a68ca0..039f15e6 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Startup.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/Startup.cs @@ -9,98 +9,96 @@ using Microsoft.Extensions.Hosting; using Microsoft.EntityFrameworkCore; using Duende.IdentityServer; -using IdentityServerHost.WsFed; -namespace IdentityServerHost +namespace IdentityServerHost; + +public class Startup { - public class Startup - { - public IWebHostEnvironment Environment { get; } - public IConfiguration Configuration { get; } + public IWebHostEnvironment Environment { get; } + public IConfiguration Configuration { get; } - public Startup(IWebHostEnvironment environment, IConfiguration configuration) - { - Environment = environment; - Configuration = configuration; - } + public Startup(IWebHostEnvironment environment, IConfiguration configuration) + { + Environment = environment; + Configuration = configuration; + } - public void ConfigureServices(IServiceCollection services) - { - services.AddRazorPages(); + public void ConfigureServices(IServiceCollection services) + { + services.AddRazorPages(); - var connectionString = Configuration.GetConnectionString("DefaultConnection"); + var connectionString = Configuration.GetConnectionString("DefaultConnection"); - var builder = services.AddIdentityServer(options => + var builder = services.AddIdentityServer(options => + { + options.Events.RaiseErrorEvents = true; + options.Events.RaiseInformationEvents = true; + options.Events.RaiseFailureEvents = true; + options.Events.RaiseSuccessEvents = true; + + // see https://docs.duendesoftware.com/identityserver/v5/fundamentals/resources/ + options.EmitStaticAudienceClaim = true; + }) + .AddTestUsers(TestUsers.Users) + // this adds the config data from DB (clients, resources, CORS) + .AddConfigurationStore(options => { - options.Events.RaiseErrorEvents = true; - options.Events.RaiseInformationEvents = true; - options.Events.RaiseFailureEvents = true; - options.Events.RaiseSuccessEvents = true; - - // see https://docs.duendesoftware.com/identityserver/v5/fundamentals/resources/ - options.EmitStaticAudienceClaim = true; + options.ConfigureDbContext = b => + b.UseSqlite(connectionString, dbOpts => dbOpts.MigrationsAssembly(typeof(Startup).Assembly.FullName)); }) - .AddTestUsers(TestUsers.Users) - // this adds the config data from DB (clients, resources, CORS) - .AddConfigurationStore(options => - { - options.ConfigureDbContext = b => - b.UseSqlite(connectionString, dbOpts => dbOpts.MigrationsAssembly(typeof(Startup).Assembly.FullName)); - }) - // this adds the operational data from DB (codes, tokens, consents) - .AddOperationalStore(options => - { - options.ConfigureDbContext = b => - b.UseSqlite(connectionString, dbOpts => dbOpts.MigrationsAssembly(typeof(Startup).Assembly.FullName)); - - // this enables automatic token cleanup. this is optional. - options.EnableTokenCleanup = true; - }); - - builder.AddWsFedDynamicProvider() - .AddIdentityProviderStore(); - - //builder.AddWsFedDynamicProvider() - // .AddInMemoryWsFedProviders(new WsFedProvider[] { - // new WsFedProvider - // { - // Scheme = "adfs", - // MetadataAddress = "https://adfs4.local/federationmetadata/2007-06/federationmetadata.xml", - // RelyingPartyId = "urn:test", - // DisplayName = "Local ADFS" - // } - // }); - - - services.AddAuthentication() - .AddGoogle(options => - { - options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme; - - // register your IdentityServer with Google at https://console.developers.google.com - // enable the Google+ API - // set the redirect URI to https://localhost:5001/signin-google - options.ClientId = "copy client ID from Google here"; - options.ClientSecret = "copy client secret from Google here"; - }); - } - - public void Configure(IApplicationBuilder app) - { - if (Environment.IsDevelopment()) + // this adds the operational data from DB (codes, tokens, consents) + .AddOperationalStore(options => { - app.UseDeveloperExceptionPage(); - } + options.ConfigureDbContext = b => + b.UseSqlite(connectionString, dbOpts => dbOpts.MigrationsAssembly(typeof(Startup).Assembly.FullName)); - app.UseStaticFiles(); + // this enables automatic token cleanup. this is optional. + options.EnableTokenCleanup = true; + }); + + builder.AddWsFedDynamicProvider() + .AddIdentityProviderStore(); + + //builder.AddWsFedDynamicProvider() + // .AddInMemoryWsFedProviders(new WsFedProvider[] { + // new WsFedProvider + // { + // Scheme = "adfs", + // MetadataAddress = "https://adfs4.local/federationmetadata/2007-06/federationmetadata.xml", + // RelyingPartyId = "urn:test", + // DisplayName = "Local ADFS" + // } + // }); - app.UseRouting(); - app.UseIdentityServer(); - app.UseAuthorization(); - app.UseEndpoints(endpoints => + + services.AddAuthentication() + .AddGoogle(options => { - endpoints.MapRazorPages(); + options.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme; + + // register your IdentityServer with Google at https://console.developers.google.com + // enable the Google+ API + // set the redirect URI to https://localhost:5001/signin-google + options.ClientId = "copy client ID from Google here"; + options.ClientSecret = "copy client secret from Google here"; }); + } + + public void Configure(IApplicationBuilder app) + { + if (Environment.IsDevelopment()) + { + app.UseDeveloperExceptionPage(); } + + app.UseStaticFiles(); + + app.UseRouting(); + app.UseIdentityServer(); + app.UseAuthorization(); + app.UseEndpoints(endpoints => + { + endpoints.MapRazorPages(); + }); } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/EfWsFedProviderStore.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/EfWsFedProviderStore.cs index 1d818af6..2399bc9e 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/EfWsFedProviderStore.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/EfWsFedProviderStore.cs @@ -8,25 +8,24 @@ using Duende.IdentityServer.Services; using Microsoft.Extensions.Logging; -namespace IdentityServerHost.WsFed +namespace IdentityServerHost; + +public class EfWsFedProviderStore : IdentityProviderStore { - public class EfWsFedProviderStore : IdentityProviderStore + public EfWsFedProviderStore(IConfigurationDbContext context, ILogger logger, ICancellationTokenProvider cancellationTokenProvider) + : base(context, logger, cancellationTokenProvider) { - public EfWsFedProviderStore(IConfigurationDbContext context, ILogger logger, ICancellationTokenProvider cancellationTokenProvider) - : base(context, logger, cancellationTokenProvider) - { - } + } - protected override IdentityProvider MapIdp(Duende.IdentityServer.EntityFramework.Entities.IdentityProvider idp) + protected override IdentityProvider MapIdp(Duende.IdentityServer.EntityFramework.Entities.IdentityProvider idp) + { + var result = base.MapIdp(idp); + + if (result == null && idp.Type == "wsfed") { - var result = base.MapIdp(idp); - - if (result == null && idp.Type == "wsfed") - { - result = new WsFedProvider(idp.ToModel()); - } - - return result; + result = new WsFedProvider(idp.ToModel()); } + + return result; } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/IdentityServerBuilderWsFedExtensions.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/IdentityServerBuilderWsFedExtensions.cs index 2e22cce8..7f0ae81e 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/IdentityServerBuilderWsFedExtensions.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/IdentityServerBuilderWsFedExtensions.cs @@ -1,57 +1,58 @@ // Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. + +using Duende.IdentityServer; using Duende.IdentityServer.Configuration; -using IdentityServerHost.WsFed; using Microsoft.AspNetCore.Authentication.WsFederation; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; using System.Collections.Generic; -namespace Microsoft.Extensions.DependencyInjection +namespace IdentityServerHost; + +/// +/// Add extension methods for configuring WsFed dynamic providers. +/// +public static class IdentityServerBuilderWsFedExtensions { /// - /// Add extension methods for configuring WsFed dynamic providers. + /// Adds the WsFed dynamic provider feature. /// - public static class IdentityServerBuilderWsFedExtensions + /// + /// + public static IIdentityServerBuilder AddWsFedDynamicProvider(this IIdentityServerBuilder builder) { - /// - /// Adds the WsFed dynamic provider feature. - /// - /// - /// - public static IIdentityServerBuilder AddWsFedDynamicProvider(this IIdentityServerBuilder builder) - { - builder.Services.Configure(options => - { - // this associates the auth handler and options classes - // to the idp class and type value from the identity provider store - options.DynamicProviders.AddProviderType("wsfed"); - }); - - // this registers the configure to build the options from the provider data - builder.Services.AddSingleton, WsFedConfigureOptions>(); - - // these are services from ASP.NET Core and are added manually since we're not using the - // AddWsFed helper that we'd normally use statically on the AddAuthentication. - builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton, WsFederationPostConfigureOptions>()); - builder.Services.TryAddTransient(); - - return builder; - } - - /// - /// Adds the in memory wsfed provider store. - /// This API is for testing when you don't yet have a database for the provider data. - /// - /// The builder. - /// - /// - internal static IIdentityServerBuilder AddInMemoryWsFedProviders(this IIdentityServerBuilder builder, IEnumerable providers) + builder.Services.Configure(options => { - builder.Services.AddSingleton(providers); - builder.AddIdentityProviderStore(); - return builder; - } + // this associates the auth handler and options classes + // to the idp class and type value from the identity provider store + options.DynamicProviders.AddProviderType("wsfed"); + }); + + // this registers the configure to build the options from the provider data + builder.Services.AddSingleton, WsFedConfigureOptions>(); + + // these are services from ASP.NET Core and are added manually since we're not using the + // AddWsFed helper that we'd normally use statically on the AddAuthentication. + builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton, WsFederationPostConfigureOptions>()); + builder.Services.TryAddTransient(); + + return builder; + } + + /// + /// Adds the in memory wsfed provider store. + /// This API is for testing when you don't yet have a database for the provider data. + /// + /// The builder. + /// + /// + internal static IIdentityServerBuilder AddInMemoryWsFedProviders(this IIdentityServerBuilder builder, IEnumerable providers) + { + builder.Services.AddSingleton(providers); + builder.AddIdentityProviderStore(); + return builder; } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/InMemoryWsFedProviderStore.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/InMemoryWsFedProviderStore.cs index 4f054b96..1499e3ab 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/InMemoryWsFedProviderStore.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/InMemoryWsFedProviderStore.cs @@ -7,29 +7,28 @@ using System.Linq; using System.Threading.Tasks; -namespace IdentityServerHost.WsFed +namespace IdentityServerHost; + +public class InMemoryWsFedProviderStore : IIdentityProviderStore { - public class InMemoryWsFedProviderStore : IIdentityProviderStore - { - private readonly IEnumerable _providers; + private readonly IEnumerable _providers; - public InMemoryWsFedProviderStore(IEnumerable providers) - { - _providers = providers; - } + public InMemoryWsFedProviderStore(IEnumerable providers) + { + _providers = providers; + } - public Task> GetAllSchemeNamesAsync() + public Task> GetAllSchemeNamesAsync() + { + return Task.FromResult(_providers.Select(x=>new IdentityProviderName { - return Task.FromResult(_providers.Select(x=>new IdentityProviderName - { - DisplayName = x.DisplayName, Enabled = x.Enabled, Scheme = x.Scheme - })); - } + DisplayName = x.DisplayName, Enabled = x.Enabled, Scheme = x.Scheme + })); + } - public Task GetBySchemeAsync(string scheme) - { - var provider = _providers.SingleOrDefault(x => x.Scheme == scheme); - return Task.FromResult(provider); - } + public Task GetBySchemeAsync(string scheme) + { + var provider = _providers.SingleOrDefault(x => x.Scheme == scheme); + return Task.FromResult(provider); } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedConfigureOptions.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedConfigureOptions.cs index 89dc8d2a..66b992d4 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedConfigureOptions.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedConfigureOptions.cs @@ -7,75 +7,75 @@ using Microsoft.AspNetCore.Authentication.WsFederation; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; using System; using System.Threading.Tasks; -namespace IdentityServerHost.WsFed +namespace IdentityServerHost; + +class WsFedConfigureOptions : ConfigureAuthenticationOptions { - class WsFedConfigureOptions : ConfigureAuthenticationOptions + public WsFedConfigureOptions(IHttpContextAccessor httpContextAccessor, ILogger> logger) : base(httpContextAccessor, logger) { - public WsFedConfigureOptions(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor) - { - } + } - protected override void Configure(ConfigureAuthenticationContext context) - { - context.AuthenticationOptions.SignInScheme = context.DynamicProviderOptions.SignInScheme; - context.AuthenticationOptions.SignOutScheme = context.DynamicProviderOptions.SignOutScheme; + protected override void Configure(ConfigureAuthenticationContext context) + { + context.AuthenticationOptions.SignInScheme = context.DynamicProviderOptions.SignInScheme; + context.AuthenticationOptions.SignOutScheme = context.DynamicProviderOptions.SignOutScheme; - context.AuthenticationOptions.MetadataAddress = context.IdentityProvider.MetadataAddress; - context.AuthenticationOptions.RequireHttpsMetadata = context.IdentityProvider.MetadataAddress.StartsWith("https"); - - context.AuthenticationOptions.Wtrealm = context.IdentityProvider.RelyingPartyId; - context.AuthenticationOptions.AllowUnsolicitedLogins = context.IdentityProvider.AllowIdpInitiated; - - context.AuthenticationOptions.TokenValidationParameters.NameClaimType = JwtClaimTypes.Name; - context.AuthenticationOptions.TokenValidationParameters.RoleClaimType = JwtClaimTypes.Role; - - context.AuthenticationOptions.CallbackPath = context.PathPrefix; - context.AuthenticationOptions.RemoteSignOutPath = context.PathPrefix; + context.AuthenticationOptions.MetadataAddress = context.IdentityProvider.MetadataAddress; + context.AuthenticationOptions.RequireHttpsMetadata = context.IdentityProvider.MetadataAddress.StartsWith("https"); + + context.AuthenticationOptions.Wtrealm = context.IdentityProvider.RelyingPartyId; + context.AuthenticationOptions.AllowUnsolicitedLogins = context.IdentityProvider.AllowIdpInitiated; + + context.AuthenticationOptions.TokenValidationParameters.NameClaimType = JwtClaimTypes.Name; + context.AuthenticationOptions.TokenValidationParameters.RoleClaimType = JwtClaimTypes.Role; + + context.AuthenticationOptions.CallbackPath = context.PathPrefix; + context.AuthenticationOptions.RemoteSignOutPath = context.PathPrefix; - context.AuthenticationOptions.Events.OnRedirectToIdentityProvider = ctx => + context.AuthenticationOptions.Events.OnRedirectToIdentityProvider = ctx => + { + if (ctx.ProtocolMessage.IsSignOutMessage) { - if (ctx.ProtocolMessage.IsSignOutMessage) - { - var url = ctx.HttpContext.Request.Scheme + "://" + - ctx.HttpContext.Request.Host + - ctx.HttpContext.Request.PathBase + - ctx.Options.CallbackPath; - - var identityServerOptions = ctx.HttpContext.RequestServices.GetRequiredService(); + var url = ctx.HttpContext.Request.Scheme + "://" + + ctx.HttpContext.Request.Host + + ctx.HttpContext.Request.PathBase + + ctx.Options.CallbackPath; - var uri = new Uri(ctx.ProtocolMessage.Wreply, UriKind.Absolute); - if (uri.AbsolutePath.EndsWith(identityServerOptions.UserInteraction.LogoutUrl, StringComparison.OrdinalIgnoreCase) && uri.Query.Contains(identityServerOptions.UserInteraction.LogoutIdParameter + "=")) - { - url += uri.Query; - } - else - { - // empty value to trigger logic in OnRemoteFailure below - url += "?" + identityServerOptions.UserInteraction.LogoutIdParameter + "="; - } + var identityServerOptions = ctx.HttpContext.RequestServices.GetRequiredService(); - ctx.ProtocolMessage.Wreply = url; + var uri = new Uri(ctx.ProtocolMessage.Wreply, UriKind.Absolute); + if (uri.AbsolutePath.EndsWith(identityServerOptions.UserInteraction.LogoutUrl, StringComparison.OrdinalIgnoreCase) && uri.Query.Contains(identityServerOptions.UserInteraction.LogoutIdParameter + "=")) + { + url += uri.Query; } - return Task.CompletedTask; - }; - - context.AuthenticationOptions.Events.OnRemoteFailure = ctx => - { - var identityServerOptions = ctx.HttpContext.RequestServices.GetRequiredService(); - - if (HttpMethods.IsGet(ctx.Request.Method) && - ctx.Request.Path == ctx.Options.CallbackPath && - ctx.Request.Query.ContainsKey(identityServerOptions.UserInteraction.LogoutIdParameter)) + else { - ctx.Response.Redirect(identityServerOptions.UserInteraction.LogoutUrl + "?" + identityServerOptions.UserInteraction.LogoutIdParameter + "=" + ctx.Request.Query[identityServerOptions.UserInteraction.LogoutIdParameter]); - ctx.HandleResponse(); + // empty value to trigger logic in OnRemoteFailure below + url += "?" + identityServerOptions.UserInteraction.LogoutIdParameter + "="; } - - return Task.CompletedTask; - }; - } + + ctx.ProtocolMessage.Wreply = url; + } + return Task.CompletedTask; + }; + + context.AuthenticationOptions.Events.OnRemoteFailure = ctx => + { + var identityServerOptions = ctx.HttpContext.RequestServices.GetRequiredService(); + + if (HttpMethods.IsGet(ctx.Request.Method) && + ctx.Request.Path == ctx.Options.CallbackPath && + ctx.Request.Query.ContainsKey(identityServerOptions.UserInteraction.LogoutIdParameter)) + { + ctx.Response.Redirect(identityServerOptions.UserInteraction.LogoutUrl + "?" + identityServerOptions.UserInteraction.LogoutIdParameter + "=" + ctx.Request.Query[identityServerOptions.UserInteraction.LogoutIdParameter]); + ctx.HandleResponse(); + } + + return Task.CompletedTask; + }; } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedProvider.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedProvider.cs index 3548f79a..59bd98d6 100755 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedProvider.cs +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/IdentityServerHost/WsFed/WsFedProvider.cs @@ -3,32 +3,31 @@ using Duende.IdentityServer.Models; -namespace IdentityServerHost.WsFed +namespace IdentityServerHost; + +public class WsFedProvider : IdentityProvider { - public class WsFedProvider : IdentityProvider + public WsFedProvider() : base("wsfed") { - public WsFedProvider() : base("wsfed") - { - } + } - public WsFedProvider(IdentityProvider other) : base("wsfed", other) - { - } + public WsFedProvider(IdentityProvider other) : base("wsfed", other) + { + } - public string MetadataAddress - { - get => this["MetadataAddress"]; - set => this["MetadataAddress"] = value; - } - public string RelyingPartyId - { - get => this["RelyingPartyId"]; - set => this["RelyingPartyId"] = value; - } - public bool AllowIdpInitiated - { - get => this["AllowIdpInitiated"] == "true"; - set => this["AllowIdpInitiated"] = value ? "true" : "false"; - } + public string MetadataAddress + { + get => this["MetadataAddress"]; + set => this["MetadataAddress"] = value; + } + public string RelyingPartyId + { + get => this["RelyingPartyId"]; + set => this["RelyingPartyId"] = value; + } + public bool AllowIdpInitiated + { + get => this["AllowIdpInitiated"] == "true"; + set => this["AllowIdpInitiated"] = value ? "true" : "false"; } } diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Controllers/HomeController.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Controllers/HomeController.cs deleted file mode 100755 index d8b24786..00000000 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Controllers/HomeController.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; - -namespace Client.Controllers -{ - public class HomeController : Controller - { - [AllowAnonymous] - public IActionResult Index() => View(); - - public IActionResult Secure() => View(); - - public IActionResult Logout() => SignOut("oidc"); - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Program.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Program.cs deleted file mode 100755 index 8561404f..00000000 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; - -namespace Client -{ - public class Program - { - public static void Main(string[] args) - { - CreateHostBuilder(args).Build().Run(); - } - - public static IHostBuilder CreateHostBuilder(string[] args) => - Host.CreateDefaultBuilder(args) - .ConfigureWebHostDefaults(webBuilder => - { - webBuilder.UseStartup(); - }); - } -} diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Startup.cs b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Startup.cs deleted file mode 100755 index 877911c0..00000000 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Startup.cs +++ /dev/null @@ -1,84 +0,0 @@ -using Microsoft.AspNetCore.Authentication; -using Microsoft.AspNetCore.Authentication.Cookies; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.IdentityModel.Tokens; -using System.IdentityModel.Tokens.Jwt; -using System.Net.Http; -using IdentityModel.Client; -using System.Threading.Tasks; - -namespace Client -{ - public class Startup - { - public void ConfigureServices(IServiceCollection services) - { - JwtSecurityTokenHandler.DefaultMapInboundClaims = false; - - services.AddControllersWithViews(); - - services.AddAuthentication(options => - { - options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; - options.DefaultChallengeScheme = "oidc"; - }) - .AddCookie(options => - { - options.Cookie.Name = "mvcbasic"; - }) - .AddOpenIdConnect("oidc", options => - { - options.Authority = "https://localhost:5001"; - options.RequireHttpsMetadata = false; - - options.ClientId = "interactive"; - options.ClientSecret = "49C1A7E1-0C79-4A89-A3D6-A37998FB86B0"; - - // code flow + PKCE (PKCE is turned on by default) - options.ResponseType = "code"; - options.UsePkce = true; - - options.Scope.Clear(); - options.Scope.Add("openid"); - options.Scope.Add("profile"); - - // not mapped by default - options.ClaimActions.MapJsonKey("website", "website"); - - // keeps id_token smaller - options.GetClaimsFromUserInfoEndpoint = true; - options.SaveTokens = true; - - options.TokenValidationParameters = new TokenValidationParameters - { - NameClaimType = "name", - RoleClaimType = "role" - }; - - options.Events.OnRedirectToIdentityProvider = ctx => - { - ctx.ProtocolMessage.AcrValues = "idp:adfs"; - return Task.CompletedTask; - }; - }); - } - - public void Configure(IApplicationBuilder app) - { - app.UseDeveloperExceptionPage(); - app.UseStaticFiles(); - - app.UseRouting(); - - app.UseAuthentication(); - app.UseAuthorization(); - - app.UseEndpoints(endpoints => - { - endpoints.MapDefaultControllerRoute() - .RequireAuthorization(); - }); - } - } -} \ No newline at end of file diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/Shared/_Layout.cshtml b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/Shared/_Layout.cshtml deleted file mode 100755 index 173783f6..00000000 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/MvcClient/Views/Shared/_Layout.cshtml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - @ViewData["Title"] - Mvc Client - - - - -
- -
-
-
- @RenderBody() -
-
- - - - - @RenderSection("Scripts", required: false) - - diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/NuGet.config b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/NuGet.config deleted file mode 100644 index d26c0d6f..00000000 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/NuGet.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/DynamicProviders.sln b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/WsFederationDynamicProviders.sln old mode 100755 new mode 100644 similarity index 91% rename from IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/DynamicProviders.sln rename to IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/WsFederationDynamicProviders.sln index dfbb21cf..23351b16 --- a/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/DynamicProviders.sln +++ b/IdentityServer/v7/UserInteraction/WsFederationDynamicProviders/WsFederationDynamicProviders.sln @@ -5,7 +5,7 @@ VisualStudioVersion = 16.0.31205.134 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IdentityServerHost", "IdentityServerHost\IdentityServerHost.csproj", "{9B241402-8ED3-4D2E-A3BE-076ACEC4F4AA}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MvcClient", "MvcClient\MvcClient.csproj", "{85CD36E8-3402-443B-859A-72E4B9390E8B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{85CD36E8-3402-443B-859A-72E4B9390E8B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution