diff --git a/.gitignore b/.gitignore index 0b62f8f..ef8bb0c 100644 --- a/.gitignore +++ b/.gitignore @@ -197,7 +197,6 @@ ClientBin/ *.dbmdl *.dbproj.schemaview *.jfm -*.pfx *.publishsettings orleans.codegen.cs diff --git a/DuendeIdentityServer/DuendeDynamicProviders/DuendeDynamicProviders.csproj b/DuendeIdentityServer/DuendeDynamicProviders/DuendeDynamicProviders.csproj index b8969e8..14dd7af 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/DuendeDynamicProviders.csproj +++ b/DuendeIdentityServer/DuendeDynamicProviders/DuendeDynamicProviders.csproj @@ -7,8 +7,8 @@ - - + + diff --git a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Account/Logout/Index.cshtml.cs b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Account/Logout/Index.cshtml.cs index d4e1f8e..aa4d82f 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Account/Logout/Index.cshtml.cs +++ b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Account/Logout/Index.cshtml.cs @@ -1,7 +1,7 @@ +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Services; -using IdentityModel; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Consent/Index.cshtml.cs b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Consent/Index.cshtml.cs index 953955e..f1f1bb4 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Consent/Index.cshtml.cs +++ b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Consent/Index.cshtml.cs @@ -1,9 +1,9 @@ +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Models; using Duende.IdentityServer.Services; using Duende.IdentityServer.Validation; -using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; diff --git a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Diagnostics/ViewModel.cs b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Diagnostics/ViewModel.cs index 1f5a7eb..5eb2ae5 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/Pages/Diagnostics/ViewModel.cs +++ b/DuendeIdentityServer/DuendeDynamicProviders/Pages/Diagnostics/ViewModel.cs @@ -1,11 +1,9 @@ // Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. - - -using IdentityModel; using Microsoft.AspNetCore.Authentication; using System.Text; using System.Text.Json; +using Duende.IdentityModel; namespace DuendeDynamicProviders.Pages.Diagnostics; diff --git a/DuendeIdentityServer/DuendeDynamicProviders/Pages/ExternalLogin/Callback.cshtml.cs b/DuendeIdentityServer/DuendeDynamicProviders/Pages/ExternalLogin/Callback.cshtml.cs index 41c37ca..22b1c5f 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/Pages/ExternalLogin/Callback.cshtml.cs +++ b/DuendeIdentityServer/DuendeDynamicProviders/Pages/ExternalLogin/Callback.cshtml.cs @@ -1,9 +1,9 @@ using System.Security.Claims; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Events; using Duende.IdentityServer.Services; using Duende.IdentityServer.Test; -using IdentityModel; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/DuendeIdentityServer/DuendeDynamicProviders/Pages/TestUsers.cs b/DuendeIdentityServer/DuendeDynamicProviders/Pages/TestUsers.cs index 06e4a13..4603c06 100644 --- a/DuendeIdentityServer/DuendeDynamicProviders/Pages/TestUsers.cs +++ b/DuendeIdentityServer/DuendeDynamicProviders/Pages/TestUsers.cs @@ -1,10 +1,9 @@ // Copyright (c) Duende Software. All rights reserved. // See LICENSE in the project root for license information. - -using IdentityModel; using System.Security.Claims; using System.Text.Json; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Test; diff --git a/DuendeIdentityServer/DuendeIdP/DuendeIdP.csproj b/DuendeIdentityServer/DuendeIdP/DuendeIdP.csproj index f010e93..d0aaa5e 100644 --- a/DuendeIdentityServer/DuendeIdP/DuendeIdP.csproj +++ b/DuendeIdentityServer/DuendeIdP/DuendeIdP.csproj @@ -10,9 +10,9 @@ - - - + + + diff --git a/DuendeIdentityServer/DuendeIdP/Pages/Account/Logout/Index.cshtml.cs b/DuendeIdentityServer/DuendeIdP/Pages/Account/Logout/Index.cshtml.cs index ed5ea66..a5ad19c 100644 --- a/DuendeIdentityServer/DuendeIdP/Pages/Account/Logout/Index.cshtml.cs +++ b/DuendeIdentityServer/DuendeIdP/Pages/Account/Logout/Index.cshtml.cs @@ -1,7 +1,7 @@ +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Services; -using IdentityModel; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/DuendeIdentityServer/DuendeIdP/Pages/Consent/Index.cshtml.cs b/DuendeIdentityServer/DuendeIdP/Pages/Consent/Index.cshtml.cs index ca7cc80..55478f8 100644 --- a/DuendeIdentityServer/DuendeIdP/Pages/Consent/Index.cshtml.cs +++ b/DuendeIdentityServer/DuendeIdP/Pages/Consent/Index.cshtml.cs @@ -1,9 +1,9 @@ +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Models; using Duende.IdentityServer.Services; using Duende.IdentityServer.Validation; -using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; diff --git a/DuendeIdentityServer/DuendeIdP/Pages/Diagnostics/ViewModel.cs b/DuendeIdentityServer/DuendeIdP/Pages/Diagnostics/ViewModel.cs index 7c1f9a3..9fe2a6a 100644 --- a/DuendeIdentityServer/DuendeIdP/Pages/Diagnostics/ViewModel.cs +++ b/DuendeIdentityServer/DuendeIdP/Pages/Diagnostics/ViewModel.cs @@ -2,10 +2,10 @@ // See LICENSE in the project root for license information. -using IdentityModel; using Microsoft.AspNetCore.Authentication; using System.Text; using System.Text.Json; +using Duende.IdentityModel; namespace DuendeIdP.Pages.Diagnostics; diff --git a/DuendeIdentityServer/DuendeIdP/Pages/ExternalLogin/Callback.cshtml.cs b/DuendeIdentityServer/DuendeIdP/Pages/ExternalLogin/Callback.cshtml.cs index 8c96a6c..ddfff7f 100644 --- a/DuendeIdentityServer/DuendeIdP/Pages/ExternalLogin/Callback.cshtml.cs +++ b/DuendeIdentityServer/DuendeIdP/Pages/ExternalLogin/Callback.cshtml.cs @@ -1,9 +1,9 @@ using System.Security.Claims; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Events; using Duende.IdentityServer.Services; using Duende.IdentityServer.Test; -using IdentityModel; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/DuendeIdentityServer/DuendeIdP/Pages/TestUsers.cs b/DuendeIdentityServer/DuendeIdP/Pages/TestUsers.cs index 92cc553..2d452c0 100644 --- a/DuendeIdentityServer/DuendeIdP/Pages/TestUsers.cs +++ b/DuendeIdentityServer/DuendeIdP/Pages/TestUsers.cs @@ -2,9 +2,9 @@ // See LICENSE in the project root for license information. -using IdentityModel; using System.Security.Claims; using System.Text.Json; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Test; diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Config.cs b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Config.cs index 3e2e0db..6ffa293 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Config.cs +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Config.cs @@ -1,7 +1,7 @@ using System.Security.Cryptography.X509Certificates; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Models; -using IdentityModel; using Rsk.Saml; using Rsk.Saml.Models; using ServiceProvider = Rsk.Saml.Models.ServiceProvider; diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/IdentityServer.csproj b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/IdentityServer.csproj index 60b98cf..b1b92d2 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/IdentityServer.csproj +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/IdentityServer.csproj @@ -6,7 +6,7 @@ - + @@ -15,8 +15,8 @@ - - + + diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Account/Logout/Index.cshtml.cs b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Account/Logout/Index.cshtml.cs index 10c2053..0ae620f 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Account/Logout/Index.cshtml.cs +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Account/Logout/Index.cshtml.cs @@ -1,8 +1,8 @@ using System.Threading.Tasks; +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Services; -using IdentityModel; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Consent/Index.cshtml.cs b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Consent/Index.cshtml.cs index a743e71..84763e9 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Consent/Index.cshtml.cs +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/Consent/Index.cshtml.cs @@ -2,12 +2,12 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Duende.IdentityModel; using Duende.IdentityServer.Events; using Duende.IdentityServer.Extensions; using Duende.IdentityServer.Models; using Duende.IdentityServer.Services; using Duende.IdentityServer.Validation; -using IdentityModel; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/TestUsers.cs b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/TestUsers.cs index 2db9cc4..f4e1353 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/TestUsers.cs +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/IdentityServer/Pages/TestUsers.cs @@ -2,10 +2,10 @@ // See LICENSE in the project root for license information. -using IdentityModel; using System.Collections.Generic; using System.Security.Claims; using System.Text.Json; +using Duende.IdentityModel; using Duende.IdentityServer; using Duende.IdentityServer.Test; diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.OIDC/WebClient.OIDC.csproj b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.OIDC/WebClient.OIDC.csproj index bca54a6..400c348 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.OIDC/WebClient.OIDC.csproj +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.OIDC/WebClient.OIDC.csproj @@ -10,7 +10,7 @@ - + diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/WebClient.SAML.1.csproj b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/WebClient.SAML.1.csproj index 70fba60..2b39f34 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/WebClient.SAML.1.csproj +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/WebClient.SAML.1.csproj @@ -9,7 +9,7 @@ - + diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/testclient.pfx b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/testclient.pfx new file mode 100644 index 0000000..1a3e8b8 Binary files /dev/null and b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.1/testclient.pfx differ diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/WebClient.SAML.2.csproj b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/WebClient.SAML.2.csproj index 70fba60..2b39f34 100644 --- a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/WebClient.SAML.2.csproj +++ b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/WebClient.SAML.2.csproj @@ -9,7 +9,7 @@ - + diff --git a/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/testclient.pfx b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/testclient.pfx new file mode 100644 index 0000000..1a3e8b8 Binary files /dev/null and b/DuendeIdentityServer/SLO/SamlOidcSLO/WebClient.SAML.2/testclient.pfx differ diff --git a/OpenIddict/OpenIddictIdP/Controllers/AuthorizationController.cs b/OpenIddict/OpenIddictIdP/Controllers/AuthorizationController.cs index b6784f4..83e853a 100644 --- a/OpenIddict/OpenIddictIdP/Controllers/AuthorizationController.cs +++ b/OpenIddict/OpenIddictIdP/Controllers/AuthorizationController.cs @@ -62,13 +62,13 @@ public async Task Authorize() // - If prompt=login was specified by the client application. // - If a max_age parameter was provided and the authentication cookie is not considered "fresh" enough. var result = await HttpContext.AuthenticateAsync(IdentityConstants.ApplicationScheme); - if (result == null || !result.Succeeded || request.HasPrompt(Prompts.Login) || + if (result == null || !result.Succeeded || request.HasPromptValue(PromptValues.Login) || request.MaxAge != null && result.Properties?.IssuedUtc != null && DateTimeOffset.UtcNow - result.Properties.IssuedUtc > TimeSpan.FromSeconds(request.MaxAge.Value)) { // If the client application requested promptless authentication, // return an error indicating that the user is not logged in. - if (request.HasPrompt(Prompts.None)) + if (request.HasPromptValue(PromptValues.None)) { return Forbid( authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, @@ -81,7 +81,7 @@ public async Task Authorize() // To avoid endless login -> authorization redirects, the prompt=login flag // is removed from the authorization request payload before redirecting the user. - var prompt = string.Join(" ", request.GetPrompts().Remove(Prompts.Login)); + var prompt = string.Join(" ", request.GetPromptValues().Remove(PromptValues.Login)); var parameters = Request.HasFormContentType ? Request.Form.Where(parameter => parameter.Key != Parameters.Prompt).ToList() : @@ -142,7 +142,7 @@ public async Task Authorize() // return an authorization response without displaying the consent form. case ConsentTypes.Implicit: case ConsentTypes.External when authorizations.Any(): - case ConsentTypes.Explicit when authorizations.Any() && !request.HasPrompt(Prompts.Consent): + case ConsentTypes.Explicit when authorizations.Any() && !request.HasPromptValue(PromptValues.Consent): // Create the claims-based identity that will be used by OpenIddict to generate tokens. var identity = new ClaimsIdentity( authenticationType: TokenValidationParameters.DefaultAuthenticationType, @@ -178,8 +178,8 @@ public async Task Authorize() // At this point, no authorization was found in the database and an error must be returned // if the client application specified prompt=none in the authorization request. - case ConsentTypes.Explicit when request.HasPrompt(Prompts.None): - case ConsentTypes.Systematic when request.HasPrompt(Prompts.None): + case ConsentTypes.Explicit when request.HasPromptValue(PromptValues.None): + case ConsentTypes.Systematic when request.HasPromptValue(PromptValues.None): return Forbid( authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme, properties: new AuthenticationProperties(new Dictionary diff --git a/OpenIddict/OpenIddictIdP/JwtClaimTypes.cs b/OpenIddict/OpenIddictIdP/JwtClaimTypes.cs new file mode 100644 index 0000000..bad4104 --- /dev/null +++ b/OpenIddict/OpenIddictIdP/JwtClaimTypes.cs @@ -0,0 +1,9 @@ +namespace openiddictidp; + +public class JwtClaimTypes +{ + public const string Subject = "sub"; + public const string Name = "name"; + public const string Role = "role"; + public const string Email = "email"; +} \ No newline at end of file diff --git a/OpenIddict/OpenIddictIdP/OpenIddictIdP.csproj b/OpenIddict/OpenIddictIdP/OpenIddictIdP.csproj index b2eab57..9275416 100644 --- a/OpenIddict/OpenIddictIdP/OpenIddictIdP.csproj +++ b/OpenIddict/OpenIddictIdP/OpenIddictIdP.csproj @@ -7,22 +7,22 @@ - + - + - + - - - + + + diff --git a/OpenIddict/OpenIddictIdP/Startup.cs b/OpenIddict/OpenIddictIdP/Startup.cs index 8bcf342..e356e23 100644 --- a/OpenIddict/OpenIddictIdP/Startup.cs +++ b/OpenIddict/OpenIddictIdP/Startup.cs @@ -1,5 +1,4 @@ using Rsk.Saml.OpenIddict.Quartz.Configuration.DependencyInjection; -using IdentityModel; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; @@ -15,6 +14,7 @@ using Rsk.Saml.OpenIddict.EntityFrameworkCore.Configuration.DependencyInjection; using Rsk.Saml.Samples; using static OpenIddict.Abstractions.OpenIddictConstants; +using Microsoft.Extensions.Options; namespace openiddictidp; @@ -92,9 +92,9 @@ public void ConfigureServices(IServiceCollection services) // Enable the authorization, logout, token and userinfo endpoints. options.SetAuthorizationEndpointUris("connect/authorize") - .SetLogoutEndpointUris("connect/logout") + .SetEndSessionEndpointUris("connect/logout") .SetTokenEndpointUris("connect/token") - .SetUserinfoEndpointUris("connect/userinfo"); + .SetUserInfoEndpointUris("connect/userinfo"); // Mark the "email", "profile" and "roles" scopes as supported scopes. options.RegisterScopes(Scopes.Email, Scopes.Profile, Scopes.Roles); @@ -110,9 +110,9 @@ public void ConfigureServices(IServiceCollection services) // Register the ASP.NET Core host and configure the ASP.NET Core-specific options. options.UseAspNetCore() .EnableAuthorizationEndpointPassthrough() - .EnableLogoutEndpointPassthrough() + .EnableEndSessionEndpointPassthrough() .EnableTokenEndpointPassthrough() - .EnableUserinfoEndpointPassthrough() + .EnableUserInfoEndpointPassthrough() .EnableStatusCodePagesIntegration(); options.AddSamlPlugin(builder => @@ -122,18 +122,9 @@ public void ConfigureServices(IServiceCollection services) //Already added the DbContext above builder.UseSamlEntityFrameworkCore() - .AddSamlMessageDbContext(optionsBuilder => - { - //Configure the database provider to use. - optionsBuilder.UseSqlServer(defaultConnectionString, x =>x.MigrationsAssembly(typeof(Startup).Assembly.FullName)); - }) - .AddSamlConfigurationDbContext(optionsBuilder => - { - //Configure the database provider to use. - optionsBuilder.UseSqlServer(defaultConnectionString, - x => x.MigrationsAssembly(typeof(Startup).Assembly.FullName)); - }); - + .AddSamlDbContexts(optionsBuilder => optionsBuilder.UseSqlServer(defaultConnectionString, + x => x.MigrationsAssembly(typeof(Startup).Assembly.FullName))); + builder.ConfigureSamlOpenIddictServerOptions(serverOptions => { serverOptions.HostOptions = new SamlHostUserInteractionOptions() @@ -202,4 +193,4 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) endpoints.MapRazorPages(); }); } -} +} \ No newline at end of file diff --git a/OpenIddict/OpenIddictIdP/Worker.cs b/OpenIddict/OpenIddictIdP/Worker.cs index e59c4f1..f3cfe77 100644 --- a/OpenIddict/OpenIddictIdP/Worker.cs +++ b/OpenIddict/OpenIddictIdP/Worker.cs @@ -154,7 +154,7 @@ private Task CreateMvcClientIfNotExists(IServiceScope scope) ocd.Permissions.UnionWith(new[] { Permissions.Endpoints.Authorization, - Permissions.Endpoints.Logout, + Permissions.Endpoints.EndSession, Permissions.Endpoints.Token, Permissions.GrantTypes.AuthorizationCode, Permissions.ResponseTypes.Code, diff --git a/README.md b/README.md index 1798291..3afc8d8 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,19 @@ # Sample projects implementing Rsk SAML component -SAML2P service provider and identity provider implementations. We support various IdentityServer implementations, including IdentityServer4, Duende IdentityServer and OpenIddict. +SAML2P service provider and identity provider implementations. We support various IdentityServer implementations, including Duende IdentityServer and OpenIddict. -The SAML2P component is available from [www.identityserver.com/products/saml2p](https://www.identityserver.com/products/saml2p). + The SAML2P component is available from [www.identityserver.com/products/saml2p](https://www.identityserver.com/products/saml2p). -The [master](https://github.com/RockSolidKnowledge/Samples.IdentityServer4.Saml2pIntegration/tree/master) branch currently uses IdentityServer4 v4 and Duende IdentityServer. Check out [identityserver4-v3](https://github.com/RockSolidKnowledge/Samples.IdentityServer4.Saml2pIntegration/tree/identityserver4-v3) for IdentityServer4 v3 samples. + +The [master](https://github.com/RockSolidKnowledge/Samples.IdentityServer4.Saml2pIntegration/tree/master) branch currently uses version 10.0 of the Saml component along with Duende IdentityServer version 7.1 and OpenIddict version 6.0. ## Projects - **spWithIdpInitiated:** an ASP.NET Core website that can accept unsolicited SAML assertions sent via IdP-Initiated SSO - **spWithMultipleIdps:** an ASP.NET Core website that can authenticate a user using two different SAML Identity Providers -- **IdentityServer4** - - **idp:** an IdentityServer4 implementation configured to act as a SAML Identity Provider with Service Provider configuration loaded from memory - - **idpWithEf:** an IdentityServer4 implementation configured to act as a SAML Identity Provider with Service Provider configuration loaded from a database - - **idpWithIdpInitiated:** an IdentityServer4 implementation configured to send unsolicited SAML assertions using IdP-Initiated SSO - - **sp:** an IdentityServer4 implementation configured to act as both a SAML Identity Provider and a SAML Service Provider - **DuendeIdentityServer** - - **DuendeIdP:** a Duende.IdentityServer implementation configured to act as a SAML Identity Provider with Service Provider configuration loaded from memory. This uses the Duende Automatic Key Management feature for signing key + - **DuendeIdP:** a Duende.IdentityServer implementation configured to act as a SAML Identity Provider with Service Provider configuration loaded from memory. This uses the Duende Automatic Key Management feature for signing key material. - **DuendeDynamicProviders:** A Duende.IdentityServer implementation acting as a SAML Service Provider with in-memory dynamic identity providers - **OpenIddictIdP:** an OpenIddict implementation configured to act as an SAML Identity Provider with Service Provider configuration loaded from an SQL Server database using EntityFrameworkCore. @@ -29,5 +25,16 @@ The [master](https://github.com/RockSolidKnowledge/Samples.IdentityServer4.Saml2 - [Documentation](https://www.identityserver.com/documentation/saml2p/) ## License Keys - -For a demo license, please sign up on our [products page](https://www.identityserver.com/products/saml2p), or reach out to . +If you are using IdentityServer and would like a demo license, please sign up on our [products page]( https://www.identityserver.com/products/saml2p). Alternative for a demo license using OpenIddict use [this](https://www.openiddictcomponents.com/products/saml2p) link. You can also reach out to . + + +#Launch urls +The launch urls for the sample projects are as follows: +|Project|Launch Url| +|---|---| +|duende.idp|https://localhost:5003| +|OpenIddict.Idp|https://localhost:55031| +|Duende Dynamic providers|https://localhost:5004| +|SPWithIdpInitiated|https://localhost:5001| +|SpWithMultipleIds|http/s://localhost:5002| +|SpWithSingleIdp|https://localhost:5002| \ No newline at end of file diff --git a/saml.slnf b/saml.slnf new file mode 100644 index 0000000..4d196e4 --- /dev/null +++ b/saml.slnf @@ -0,0 +1,17 @@ +{ + "solution": { + "path": "Saml.sln", + "projects": [ + "DuendeIdentityServer\\DuendeDynamicProviders\\DuendeDynamicProviders.csproj", + "DuendeIdentityServer\\DuendeIdP\\DuendeIdP.csproj", + "DuendeIdentityServer\\SLO\\SamlOidcSLO\\IdentityServer\\IdentityServer.csproj", + "DuendeIdentityServer\\SLO\\SamlOidcSLO\\WebClient.OIDC\\WebClient.OIDC.csproj", + "DuendeIdentityServer\\SLO\\SamlOidcSLO\\WebClient.SAML.1\\WebClient.SAML.1.csproj", + "DuendeIdentityServer\\SLO\\SamlOidcSLO\\WebClient.SAML.2\\WebClient.SAML.2.csproj", + "OpenIddict\\OpenIddictIdP\\OpenIddictIdP.csproj", + "spWithIdpInitiated\\spWithIdpInitiated.csproj", + "spWithMultipleIdps\\spWithMultipleIdps.csproj", + "spWithSingleIdp\\spWithSingleIdp.csproj" + ] + } +} \ No newline at end of file diff --git a/spWithIdpInitiated/spWithIdpInitiated.csproj b/spWithIdpInitiated/spWithIdpInitiated.csproj index e56abed..ba34f12 100644 --- a/spWithIdpInitiated/spWithIdpInitiated.csproj +++ b/spWithIdpInitiated/spWithIdpInitiated.csproj @@ -6,7 +6,7 @@ - + diff --git a/spWithMultipleIdps/spWithMultipleIdps.csproj b/spWithMultipleIdps/spWithMultipleIdps.csproj index 3cbcf4c..6aa51b8 100644 --- a/spWithMultipleIdps/spWithMultipleIdps.csproj +++ b/spWithMultipleIdps/spWithMultipleIdps.csproj @@ -6,7 +6,7 @@ - + diff --git a/spWithSingleIdp/spWithSingleIdp.csproj b/spWithSingleIdp/spWithSingleIdp.csproj index e4797b7..c60b5b2 100644 --- a/spWithSingleIdp/spWithSingleIdp.csproj +++ b/spWithSingleIdp/spWithSingleIdp.csproj @@ -8,6 +8,6 @@ - + \ No newline at end of file