From a2e3c4c71bd92b9bc0546587f25a917db69f90dd Mon Sep 17 00:00:00 2001 From: Henry Alberto Rodriguez Date: Sat, 26 Oct 2019 15:55:18 -0500 Subject: [PATCH] v2.0.0-Preview1 --- .github/workflows/blank.yml | 20 +++----- Nuget.Config | 9 ++++ README.md | 24 ++++++---- .../Examples.AspNetCoreHosted.Client.csproj | 27 ++++++++--- .../Client/Startup.cs | 8 ++-- .../Examples.AspNetCoreHosted.Server.csproj | 10 ++-- .../Server/Startup.cs | 5 +- .../Examples.ClientSide.csproj | 22 +++++++-- examples/Examples.ClientSide/Startup.cs | 8 ++-- .../Examples.ServerSide.csproj | 19 +++++--- examples/Examples.ServerSide/Startup.cs | 8 ++-- examples/Examples.ServerSide/appsettings.json | 2 +- .../AuthenticationService.cs | 2 +- .../Blazor.Auth0.ClientSide.csproj | 35 +++++++++----- .../Blazor.Auth0.ServerSide.csproj | 42 ++++++++++------ .../BlazorAuth0BuilderExtensions.cs | 4 +- .../Blazor.Auth0.Shared.csproj | 20 ++++---- src/Blazor.Auth0.sln | 48 +++++++++++++++++-- 18 files changed, 215 insertions(+), 98 deletions(-) create mode 100644 Nuget.Config diff --git a/.github/workflows/blank.yml b/.github/workflows/blank.yml index e8fefb8..ee357d4 100644 --- a/.github/workflows/blank.yml +++ b/.github/workflows/blank.yml @@ -6,7 +6,7 @@ jobs: build: container: - image: mcr.microsoft.com/dotnet/core/sdk:3.0.100-disco + image: mcr.microsoft.com/dotnet/core/sdk:3.1.100-preview1-bionic runs-on: ubuntu-16.04 @@ -20,39 +20,31 @@ jobs: - name: Build Blazor-Auth0-Shared project. run: | dotnet build src/Blazor.Auth0.Shared - dotnet pack src/Blazor.Auth0.Shared/Blazor.Auth0.Shared.csproj --no-build --output $HOME - name: Build Blazor-Auth0-ClientSide project. run: | - dotnet restore src/Blazor.Auth0.ClientSide -s $HOME -s https://api.nuget.org/v3/index.json - dotnet build src/Blazor.Auth0.ClientSide - dotnet pack src/Blazor.Auth0.ClientSide/Blazor.Auth0.ClientSide.csproj --no-build --output $HOME + dotnet build src/Blazor.Auth0.ClientSide --source /__w/Blazor.Auth0/packages --source https://api.nuget.org/v3/index.json --configuration Release - name: Build Blazor-Auth0-ServerSide project. run: | - dotnet restore src/Blazor.Auth0.ServerSide -s $HOME -s https://api.nuget.org/v3/index.json - dotnet build src/Blazor.Auth0.ServerSide - dotnet pack src/Blazor.Auth0.ServerSide/Blazor.Auth0.ServerSide.csproj --no-build --output $HOME + dotnet build src/Blazor.Auth0.ServerSide --source /__w/Blazor.Auth0/packages --source https://api.nuget.org/v3/index.json --configuration Release - name: Build AspNetCoreHosted Example. run: | - dotnet restore examples/Examples.AspNetCoreHosted/Client -s $HOME -s https://api.nuget.org/v3/index.json - dotnet build examples/Examples.AspNetCoreHosted/Server + dotnet build examples/Examples.AspNetCoreHosted/Server --source /__w/Blazor.Auth0/packages --source https://api.nuget.org/v3/index.json --configuration Release - name: Build ClientSide Example. run: | - dotnet restore examples/Examples.ClientSide -s $HOME -s https://api.nuget.org/v3/index.json - dotnet build examples/Examples.ClientSide + dotnet build examples/Examples.ClientSide --source /__w/Blazor.Auth0/packages --source https://api.nuget.org/v3/index.json --configuration Release - name: Build ServerSide Example. run: | - dotnet restore examples/Examples.ServerSide -s $HOME -s https://api.nuget.org/v3/index.json - dotnet build examples/Examples.ServerSide + dotnet build examples/Examples.ServerSide --source /__w/Blazor.Auth0/packages --source https://api.nuget.org/v3/index.json --configuration Release - name: Publish Blazor-Auth0-Shared Nuget package. diff --git a/Nuget.Config b/Nuget.Config new file mode 100644 index 0000000..1726f28 --- /dev/null +++ b/Nuget.Config @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 2a126bd..e2bbbaa 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Blazor Auth0 Library -This is a library for Blazor authentication with OIDC Authorization Code-Grant and Implicit-Grant flows, using Auth0's Universal Login and Silent Login for [Blazor](http://blazor.net) over .NET Core v3.0.0 client & server-side solutions, the idea behind this is to have an easy way of using Auth0's services in Blazor without the need of the auth0.js library. +This is a library for Blazor authentication with OIDC Authorization Code-Grant and Implicit-Grant flows, using Auth0's Universal Login and Silent Login for [Blazor](http://blazor.net) over .Net Core 3.1.0-preview1 client & server-side solutions, the idea behind this is to have an easy way of using Auth0's services in Blazor without the need of the auth0.js library. [![Nuget](https://img.shields.io/nuget/v/Blazor-Auth0-ServerSide?color=green&label=Nuget%3A%20Blazor-Auth0-ServerSide)](https://www.nuget.org/packages/Blazor-Auth0-ServerSide) [![Nuget](https://img.shields.io/nuget/v/Blazor-Auth0-ClientSide?color=green&label=Nuget%3A%20Blazor-Auth0-Clientside)](https://www.nuget.org/packages/Blazor-Auth0-ClientSide) @@ -36,12 +36,12 @@ Install via [Nuget](https://www.nuget.org/). >Server Side ```bash -Install-Package Blazor-Auth0-ServerSide -Version 1.0.0-Preview3 +Install-Package Blazor-Auth0-ServerSide -Version 2.0.0-Preview1 ```` >Client Side ```bash -Install-Package Blazor-Auth0-ClientSide -Version 1.0.0-Preview3 +Install-Package Blazor-Auth0-ClientSide -Version 2.0.0-Preview1 ```` ## Usage @@ -134,14 +134,11 @@ Pull requests are welcome. For major changes, please open an issue first to disc 4. Push to the branch (`git push origin feature/fooBar`) 5. Create a new Pull Request +* Especial thanks for its help to all the [contributors](https://github.com/henalbrod/Blazor.Auth0/graphs/contributors) + ## Authors **Henry Alberto Rodriguez** - _Initial work_ - [GitHub](https://github.com/henalbrod) - [Twitter](https://twitter.com/henalbrod) - [Linkedin](https://www.linkedin.com/in/henalbrod/) -* Especial thanks for its contributions to: - -**jbomhold3** [GitHub](https://github.com/jbomhold3) -**TopSwagCode** [GitHub](https://github.com/TopSwagCode) - ## License This project is licensed under the MIT License - see the [LICENSE](https://github.com/henalbrod/Blazor.Auth0/blob/master/LICENSE) file for details. @@ -154,6 +151,17 @@ This project is licensed under the MIT License - see the [LICENSE](https://githu ## Release History +**v2.0.0-Preview1** + +BREAKING CHANGES: + +* Upgraded to .Net Core 3.1.0-preview1 +* Server side projects upgraded to netcoreapp3.1 +* Auth0 permissions are now accesible as an any other array claim: +```C# +policy.RequireClaim("permissions", "permission_name") +``` + **v1.0.0-Preview3** * Overall upgrade to .Net Core 3.0 diff --git a/examples/Examples.AspNetCoreHosted/Client/Examples.AspNetCoreHosted.Client.csproj b/examples/Examples.AspNetCoreHosted/Client/Examples.AspNetCoreHosted.Client.csproj index 01bbf85..f8768b8 100644 --- a/examples/Examples.AspNetCoreHosted/Client/Examples.AspNetCoreHosted.Client.csproj +++ b/examples/Examples.AspNetCoreHosted/Client/Examples.AspNetCoreHosted.Client.csproj @@ -1,4 +1,4 @@ - + netstandard2.0 @@ -8,13 +8,26 @@ - - - - - + + + + - + + + + + + + + + + + + + + + diff --git a/examples/Examples.AspNetCoreHosted/Client/Startup.cs b/examples/Examples.AspNetCoreHosted/Client/Startup.cs index c051eb3..ef6c8b0 100644 --- a/examples/Examples.AspNetCoreHosted/Client/Startup.cs +++ b/examples/Examples.AspNetCoreHosted/Client/Startup.cs @@ -14,7 +14,7 @@ public void ConfigureServices(IServiceCollection services) options.Domain = "[Auth0_Domain]"; // Required - options.ClientId = "[Auth0_client_Id]"; + options.ClientId = "[Auth0_Client_Id]"; //// Required if you want to make use of Auth0's RBAC options.Audience = "[Auth0_Audience]"; @@ -29,11 +29,11 @@ public void ConfigureServices(IServiceCollection services) // options.SlidingExpiration = true; }); - // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.0 + // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1 services.AddAuthorizationCore(options => { - options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("read:weather_forecast")); - options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("execute:increment_counter")); + options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("permissions", "read:weather_forecast")); + options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("permissions", "execute:increment_counter")); }); } diff --git a/examples/Examples.AspNetCoreHosted/Server/Examples.AspNetCoreHosted.Server.csproj b/examples/Examples.AspNetCoreHosted/Server/Examples.AspNetCoreHosted.Server.csproj index cda137f..a097753 100644 --- a/examples/Examples.AspNetCoreHosted/Server/Examples.AspNetCoreHosted.Server.csproj +++ b/examples/Examples.AspNetCoreHosted/Server/Examples.AspNetCoreHosted.Server.csproj @@ -1,15 +1,15 @@  - netcoreapp3.0 + netcoreapp3.1 7.3 - 12dacd65-df84-4051-99c4-fbc453d4c470 + 6c2330d9-84c7-4bf5-80a9-6b48c017bbab - - - + + + diff --git a/examples/Examples.AspNetCoreHosted/Server/Startup.cs b/examples/Examples.AspNetCoreHosted/Server/Startup.cs index 5be03ea..ae0743e 100644 --- a/examples/Examples.AspNetCoreHosted/Server/Startup.cs +++ b/examples/Examples.AspNetCoreHosted/Server/Startup.cs @@ -40,7 +40,7 @@ public void ConfigureServices(IServiceCollection services) services.AddAuthorizationCore(options => { - options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("read:weather_forecast")); + options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("permissions","read:weather_forecast")); }); services.AddResponseCompression(opts => @@ -62,12 +62,13 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env) } app.UseAuthentication(); - app.UseAuthorization(); app.UseStaticFiles(); app.UseClientSideBlazorFiles(); app.UseRouting(); + + app.UseAuthorization(); app.UseEndpoints(endpoints => { diff --git a/examples/Examples.ClientSide/Examples.ClientSide.csproj b/examples/Examples.ClientSide/Examples.ClientSide.csproj index 3486084..5d931a7 100644 --- a/examples/Examples.ClientSide/Examples.ClientSide.csproj +++ b/examples/Examples.ClientSide/Examples.ClientSide.csproj @@ -8,11 +8,23 @@ - - - - - + + + + + + + + + + + + + + + + + diff --git a/examples/Examples.ClientSide/Startup.cs b/examples/Examples.ClientSide/Startup.cs index b6da7b0..014fafa 100644 --- a/examples/Examples.ClientSide/Startup.cs +++ b/examples/Examples.ClientSide/Startup.cs @@ -16,7 +16,7 @@ public void ConfigureServices(IServiceCollection services) options.Domain = "[Auth0_Domain]"; // Required - options.ClientId = "[Auth0_client_Id]"; + options.ClientId = "[Auth0_Client_Id]"; //// Required if you want to make use of Auth0's RBAC options.Audience = "[Auth0_Audience]"; @@ -31,11 +31,11 @@ public void ConfigureServices(IServiceCollection services) // options.SlidingExpiration = true; }); - // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.0 + // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1 services.AddAuthorizationCore(options => { - options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("read:weather_forecast")); - options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("execute:increment_counter")); + options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("permissions", "read:weather_forecast")); + options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("permissions", "execute:increment_counter")); }); } diff --git a/examples/Examples.ServerSide/Examples.ServerSide.csproj b/examples/Examples.ServerSide/Examples.ServerSide.csproj index 8dbb244..0dd14ce 100644 --- a/examples/Examples.ServerSide/Examples.ServerSide.csproj +++ b/examples/Examples.ServerSide/Examples.ServerSide.csproj @@ -1,15 +1,22 @@  - netcoreapp3.0 - - + netcoreapp3.1 6c2330d9-84c7-4bf5-80a9-6b48c017bbab - - - + + + + + + + + + + + + diff --git a/examples/Examples.ServerSide/Startup.cs b/examples/Examples.ServerSide/Startup.cs index bfa88da..7cb933b 100644 --- a/examples/Examples.ServerSide/Startup.cs +++ b/examples/Examples.ServerSide/Startup.cs @@ -36,11 +36,11 @@ public void ConfigureServices(IServiceCollection services) // New Blazor.Auth0 one liner intantiation services.AddDefaultBlazorAuth0Authentication(Configuration.GetSection("Auth0").Get()); - // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.0 - services.AddAuthorization(options => + // Policy based authorization, learn more here: https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-3.1 + services.AddAuthorizationCore(options => { - options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("read:weather_forecast")); - options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("execute:increment_counter")); + options.AddPolicy("read:weather_forecast", policy => policy.RequireClaim("permissions", "read:weather_forecast")); + options.AddPolicy("execute:increment_counter", policy => policy.RequireClaim("permissions", "execute:increment_counter")); }); services.AddSingleton(); diff --git a/examples/Examples.ServerSide/appsettings.json b/examples/Examples.ServerSide/appsettings.json index e8ca862..abe6672 100644 --- a/examples/Examples.ServerSide/appsettings.json +++ b/examples/Examples.ServerSide/appsettings.json @@ -1,6 +1,6 @@ { "Auth0": { - "Domain": "[Auth0_Audience]", + "Domain": "[Auth0_Domain]", "ClientId": "[Auth0_Client_Id]", "Audience": "[Auth0_Audience]", "ClientSecret": "[Auth0_Client_Secret]" diff --git a/src/Blazor.Auth0.ClientSide/AuthenticationService.cs b/src/Blazor.Auth0.ClientSide/AuthenticationService.cs index ddbfb9e..bcad47e 100644 --- a/src/Blazor.Auth0.ClientSide/AuthenticationService.cs +++ b/src/Blazor.Auth0.ClientSide/AuthenticationService.cs @@ -243,7 +243,7 @@ public Task GetAuthenticationStateAsync() identity.AddClaims(this.User.CustomClaims.Select(customClaim => new Claim(customClaim.Key, customClaim.Value.GetRawText(), customClaim.Value.ValueKind.ToString()))); - identity.AddClaims(this.User.Permissions.Select(permission => new Claim($"{permission}", "true", "permissions"))); + identity.AddClaims(this.User.Permissions.Select(permission => new Claim("permissions", permission, "permissions"))); } else { diff --git a/src/Blazor.Auth0.ClientSide/Blazor.Auth0.ClientSide.csproj b/src/Blazor.Auth0.ClientSide/Blazor.Auth0.ClientSide.csproj index 63341b9..60c373b 100644 --- a/src/Blazor.Auth0.ClientSide/Blazor.Auth0.ClientSide.csproj +++ b/src/Blazor.Auth0.ClientSide/Blazor.Auth0.ClientSide.csproj @@ -3,8 +3,8 @@ netstandard2.0 3.0 - - 1.0.0-Preview3 + 8.0 + 2.0.0-Preview1 Henry Alberto Rodriguez Rodriguez Auth0 library for Balzor https://github.com/henalbrod/Blazor.Auth0 @@ -16,17 +16,21 @@ true https://raw.githubusercontent.com/henalbrod/Blazor.Auth0/master/src/Blazor.Auth0.ClientSide/icon.png Blazor-Auth0-ClientSide - Upgraded to .Net Core 3.0.0 - + Upgraded to .Net Core 3.1.0-preview1 + +BREAKING CHANGES: + +Auth0 permissions are now accesible as an any other array claim: policy.RequireClaim("permissions", "permission_name") true + ..\..\packages - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -51,9 +55,18 @@ - - - + + + + + + + + + + + + diff --git a/src/Blazor.Auth0.ServerSide/Blazor.Auth0.ServerSide.csproj b/src/Blazor.Auth0.ServerSide/Blazor.Auth0.ServerSide.csproj index 33b64e0..fa4f355 100644 --- a/src/Blazor.Auth0.ServerSide/Blazor.Auth0.ServerSide.csproj +++ b/src/Blazor.Auth0.ServerSide/Blazor.Auth0.ServerSide.csproj @@ -1,9 +1,9 @@  - netcoreapp3.0 - - 1.0.0-Preview3 + netcoreapp3.1 + 8.0 + 2.0.0-Preview1 Henry Alberto Rodriguez Rodriguez Auth0 library for Balzor https://github.com/henalbrod/Blazor.Auth0 @@ -15,8 +15,13 @@ true https://raw.githubusercontent.com/henalbrod/Blazor.Auth0/master/src/Blazor.Auth0.ClientSide/icon.png Blazor-Auth0-ServerSide - Upgraded to .Net Core 3.0.0 + Upgraded to .Net Core 3.1.0-preview1 + +BREAKING CHANGES: + +Auth0 permissions are now accesible as an any other array claim: policy.RequireClaim("permissions", "permission_name") true + ..\..\packages @@ -26,11 +31,24 @@ - - - - - + + + + + + + + + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -40,8 +58,4 @@ - - - - - + \ No newline at end of file diff --git a/src/Blazor.Auth0.ServerSide/BlazorAuth0BuilderExtensions.cs b/src/Blazor.Auth0.ServerSide/BlazorAuth0BuilderExtensions.cs index 2cdc6c3..e0a84c4 100644 --- a/src/Blazor.Auth0.ServerSide/BlazorAuth0BuilderExtensions.cs +++ b/src/Blazor.Auth0.ServerSide/BlazorAuth0BuilderExtensions.cs @@ -10,6 +10,7 @@ namespace Blazor.Auth0 using System.Net.Http; using System.Security.Claims; using System.Security.Principal; + using System.Text.Json; using System.Threading.Tasks; using System.Web; using Blazor.Auth0.Models; @@ -187,6 +188,7 @@ public static void AddDefaultBlazorAuth0Authentication(this IServiceCollection s HttpRequest request = context.Request; postLogoutUri = request.Scheme + "://" + request.Host + request.PathBase + postLogoutUri; } + logoutUri += $"&returnTo={Uri.EscapeDataString(postLogoutUri)}"; } @@ -215,7 +217,7 @@ public static void AddDefaultBlazorAuth0Authentication(this IServiceCollection s identity.AddClaims(u.Principal.Claims); - identity.AddClaims(permissions.Select(permission => new Claim($"{permission}", "true", "permissions"))); + identity.AddClaims(permissions.Select(permission => new Claim("permissions", permission, "permissions"))); identity.AddClaim(new Claim("exp", parsedAccessToken.Exp.ToString(), ClaimValueTypes.Integer64)); diff --git a/src/Blazor.Auth0.Shared/Blazor.Auth0.Shared.csproj b/src/Blazor.Auth0.Shared/Blazor.Auth0.Shared.csproj index 4d527d2..0eade8b 100644 --- a/src/Blazor.Auth0.Shared/Blazor.Auth0.Shared.csproj +++ b/src/Blazor.Auth0.Shared/Blazor.Auth0.Shared.csproj @@ -2,8 +2,8 @@ netstandard2.0 - - 1.0.0-Preview3 + 8.0 + 2.0.0-Preview1 Henry Alberto Rodriguez Rodriguez Auth0 library for Balzor https://github.com/henalbrod/Blazor.Auth0 @@ -15,9 +15,13 @@ true https://raw.githubusercontent.com/henalbrod/Blazor.Auth0/master/src/Blazor.Auth0.ClientSide/icon.png Blazor-Auth0-Shared - Upgraded to .Net Core 3.0.0 - true + Upgraded to .Net Core 3.1.0-preview1 +BREAKING CHANGES: + +Auth0 permissions are now accesible as an any other array claim: policy.RequireClaim("permissions", "permission_name") + true + ..\..\packages @@ -29,11 +33,11 @@ - - - + + + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/Blazor.Auth0.sln b/src/Blazor.Auth0.sln index a6a416d..f325313 100644 --- a/src/Blazor.Auth0.sln +++ b/src/Blazor.Auth0.sln @@ -3,11 +3,25 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.28803.202 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazor.Auth0.Shared", "Blazor.Auth0.Shared\Blazor.Auth0.Shared.csproj", "{20F66828-6565-489D-B197-E8251B200737}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.Auth0.Shared", "Blazor.Auth0.Shared\Blazor.Auth0.Shared.csproj", "{20F66828-6565-489D-B197-E8251B200737}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazor.Auth0.ClientSide", "Blazor.Auth0.ClientSide\Blazor.Auth0.ClientSide.csproj", "{A8C1B957-C46E-4936-B470-0E6D03CD0EFB}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.Auth0.ClientSide", "Blazor.Auth0.ClientSide\Blazor.Auth0.ClientSide.csproj", "{A8C1B957-C46E-4936-B470-0E6D03CD0EFB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Blazor.Auth0.ServerSide", "Blazor.Auth0.ServerSide\Blazor.Auth0.ServerSide.csproj", "{CE138C35-6B00-4BE4-A172-F4E641070348}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Blazor.Auth0.ServerSide", "Blazor.Auth0.ServerSide\Blazor.Auth0.ServerSide.csproj", "{CE138C35-6B00-4BE4-A172-F4E641070348}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{30AEBE64-A293-424D-A26A-ADCDAAAF7391}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples.ClientSide", "..\examples\Examples.ClientSide\Examples.ClientSide.csproj", "{7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples.ServerSide", "..\examples\Examples.ServerSide\Examples.ServerSide.csproj", "{041EF1E4-B4E2-4A44-884E-144F2FE6F566}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ASP.Net Core Hosted", "ASP.Net Core Hosted", "{7AC81899-F4AF-4B85-8B8F-BE6E3BD2E4AE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples.AspNetCoreHosted.Shared", "..\examples\Examples.AspNetCoreHosted\Shared\Examples.AspNetCoreHosted.Shared.csproj", "{C0690880-66EB-49CE-99BA-6A5099B85306}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples.AspNetCoreHosted.Client", "..\examples\Examples.AspNetCoreHosted\Client\Examples.AspNetCoreHosted.Client.csproj", "{3242EA63-B755-485B-9ECB-C873B5F7DDE7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Examples.AspNetCoreHosted.Server", "..\examples\Examples.AspNetCoreHosted\Server\Examples.AspNetCoreHosted.Server.csproj", "{50045E62-8938-4C58-AC2A-7C7946A67E0B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,10 +41,38 @@ Global {CE138C35-6B00-4BE4-A172-F4E641070348}.Debug|Any CPU.Build.0 = Debug|Any CPU {CE138C35-6B00-4BE4-A172-F4E641070348}.Release|Any CPU.ActiveCfg = Release|Any CPU {CE138C35-6B00-4BE4-A172-F4E641070348}.Release|Any CPU.Build.0 = Release|Any CPU + {7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2}.Release|Any CPU.Build.0 = Release|Any CPU + {041EF1E4-B4E2-4A44-884E-144F2FE6F566}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {041EF1E4-B4E2-4A44-884E-144F2FE6F566}.Debug|Any CPU.Build.0 = Debug|Any CPU + {041EF1E4-B4E2-4A44-884E-144F2FE6F566}.Release|Any CPU.ActiveCfg = Release|Any CPU + {041EF1E4-B4E2-4A44-884E-144F2FE6F566}.Release|Any CPU.Build.0 = Release|Any CPU + {C0690880-66EB-49CE-99BA-6A5099B85306}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C0690880-66EB-49CE-99BA-6A5099B85306}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C0690880-66EB-49CE-99BA-6A5099B85306}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C0690880-66EB-49CE-99BA-6A5099B85306}.Release|Any CPU.Build.0 = Release|Any CPU + {3242EA63-B755-485B-9ECB-C873B5F7DDE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3242EA63-B755-485B-9ECB-C873B5F7DDE7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3242EA63-B755-485B-9ECB-C873B5F7DDE7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3242EA63-B755-485B-9ECB-C873B5F7DDE7}.Release|Any CPU.Build.0 = Release|Any CPU + {50045E62-8938-4C58-AC2A-7C7946A67E0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50045E62-8938-4C58-AC2A-7C7946A67E0B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50045E62-8938-4C58-AC2A-7C7946A67E0B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50045E62-8938-4C58-AC2A-7C7946A67E0B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {7C0D133F-DCB3-4C3B-B13F-D20BF9D97DA2} = {30AEBE64-A293-424D-A26A-ADCDAAAF7391} + {041EF1E4-B4E2-4A44-884E-144F2FE6F566} = {30AEBE64-A293-424D-A26A-ADCDAAAF7391} + {7AC81899-F4AF-4B85-8B8F-BE6E3BD2E4AE} = {30AEBE64-A293-424D-A26A-ADCDAAAF7391} + {C0690880-66EB-49CE-99BA-6A5099B85306} = {7AC81899-F4AF-4B85-8B8F-BE6E3BD2E4AE} + {3242EA63-B755-485B-9ECB-C873B5F7DDE7} = {7AC81899-F4AF-4B85-8B8F-BE6E3BD2E4AE} + {50045E62-8938-4C58-AC2A-7C7946A67E0B} = {7AC81899-F4AF-4B85-8B8F-BE6E3BD2E4AE} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3EA56D0B-82C6-43BB-921D-628F04092D1F} EndGlobalSection