diff --git a/src/ApiCommons.Tests/ApiCommons.Tests.csproj b/src/ApiCommons.Tests/ApiCommons.Tests.csproj index d71f23e968dd9d2026c281742b9b742131e86447..d7e2b5df23fa42db67a03cfed24bb106d09985ba 100644 --- a/src/ApiCommons.Tests/ApiCommons.Tests.csproj +++ b/src/ApiCommons.Tests/ApiCommons.Tests.csproj @@ -1,8 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="..\packages\EntityFramework.6.4.4\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" /> - <Import Project="..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props" Condition="Exists('..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props')" /> - <Import Project="..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props" Condition="Exists('..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props')" /> <Import Project="..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props" Condition="Exists('..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props')" /> <Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> @@ -44,11 +42,11 @@ <Reference Include="Coscine.Configuration, Version=1.5.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Configuration.1.5.0\lib\net461\Coscine.Configuration.dll</HintPath> </Reference> - <Reference Include="Coscine.Database, Version=1.24.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.24.0\lib\net461\Coscine.Database.dll</HintPath> + <Reference Include="Coscine.Database, Version=1.26.1.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.26.1-topic-1125-apito0012\lib\net461\Coscine.Database.dll</HintPath> </Reference> - <Reference Include="Coscine.Database.T4, Version=1.24.0.0, Culture=neutral, PublicKeyToken=84b4c404a0696261, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.24.0\lib\net461\Coscine.Database.T4.dll</HintPath> + <Reference Include="Coscine.Database.T4, Version=1.26.1.0, Culture=neutral, PublicKeyToken=84b4c404a0696261, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.26.1-topic-1125-apito0012\lib\net461\Coscine.Database.T4.dll</HintPath> </Reference> <Reference Include="Coscine.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e1ed402bc3f6525e, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Logging.1.2.0\lib\net461\Coscine.Logging.dll</HintPath> @@ -118,8 +116,6 @@ </PropertyGroup> <Error Condition="!Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" /> <Error Condition="!Exists('..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit3TestAdapter.3.13.0\build\net35\NUnit3TestAdapter.props'))" /> - <Error Condition="!Exists('..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props'))" /> - <Error Condition="!Exists('..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props'))" /> <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.props'))" /> <Error Condition="!Exists('..\packages\EntityFramework.6.4.4\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.4.4\build\EntityFramework.targets'))" /> </Target> diff --git a/src/ApiCommons.Tests/ApiCommonsTests.cs b/src/ApiCommons.Tests/ApiCommonsTests.cs index 214c23504e92b43f5dd86b36fa6564b589cf9c03..17d3131bf873b3d51d73e1aa8392e2f78f03f7bf 100644 --- a/src/ApiCommons.Tests/ApiCommonsTests.cs +++ b/src/ApiCommons.Tests/ApiCommonsTests.cs @@ -13,7 +13,7 @@ namespace ApiCommons.Tests { CoscineLoggerConfiguration.SetConfig(); - var logger = LogManager.GetCurrentClassLogger(); + LogManager.GetCurrentClassLogger(); } } diff --git a/src/ApiCommons.Tests/Properties/AssemblyInfo.cs b/src/ApiCommons.Tests/Properties/AssemblyInfo.cs index 092a35258b824d0ca00b1ffb6f29e82712585447..1c4367e987e2b43b4adf1ede766d191c471fce43 100644 --- a/src/ApiCommons.Tests/Properties/AssemblyInfo.cs +++ b/src/ApiCommons.Tests/Properties/AssemblyInfo.cs @@ -9,8 +9,8 @@ using System.Reflection; [assembly: AssemblyDescription("ApiCommons.Tests is a part of the CoScInE group.")] [assembly: AssemblyCompany("IT Center, RWTH Aachen University")] [assembly: AssemblyProduct("ApiCommons.Tests")] -[assembly: AssemblyVersion("1.9.0")] -[assembly: AssemblyFileVersion("1.9.0")] -[assembly: AssemblyInformationalVersion("1.9.0-topic-827-notifi0001")] +[assembly: AssemblyVersion("1.10.1")] +[assembly: AssemblyFileVersion("1.10.1")] +[assembly: AssemblyInformationalVersion("1.10.1-topic-1123-token0014")] [assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")] diff --git a/src/ApiCommons.Tests/packages.config b/src/ApiCommons.Tests/packages.config index 865b675e389f686799f52bc32ba6a3f4b9a54814..bff9661d699b4b1fa54b459faed8cc4d9a24e0bd 100644 --- a/src/ApiCommons.Tests/packages.config +++ b/src/ApiCommons.Tests/packages.config @@ -2,12 +2,10 @@ <packages> <package id="Consul" version="0.7.2.6" targetFramework="net461" /> <package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" /> - <package id="Coscine.Database" version="1.24.0" targetFramework="net461" /> + <package id="Coscine.Database" version="1.26.1-topic-1125-apito0012" targetFramework="net461" /> <package id="Coscine.Logging" version="1.2.0" targetFramework="net461" /> <package id="EntityFramework" version="6.4.4" targetFramework="net461" /> <package id="linq2db" version="3.1.1" targetFramework="net461" /> - <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net461" /> - <package id="linq2db.t4models" version="2.6.4" targetFramework="net461" /> <package id="LinqKit" version="1.1.17" targetFramework="net461" /> <package id="Microsoft.Extensions.Logging.Abstractions" version="2.2.0" targetFramework="net461" /> <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" /> diff --git a/src/ApiCommons/AbstractDefaultStartup.cs b/src/ApiCommons/AbstractDefaultStartup.cs index 0b0be7b30e717b878dc2f32c9d5d45ec9fd96b00..0f16393fdc0237bd441fe5e30c418884d69a19d4 100644 --- a/src/ApiCommons/AbstractDefaultStartup.cs +++ b/src/ApiCommons/AbstractDefaultStartup.cs @@ -1,14 +1,11 @@ using Coscine.ApiCommons.Middleware; -using Coscine.ApiCommons.Utils; using Coscine.Configuration; using Coscine.Database.Settings; using LinqToDB.Data; -using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection; -using Microsoft.IdentityModel.Tokens; namespace Coscine.ApiCommons { diff --git a/src/ApiCommons/AbstractStartup.cs b/src/ApiCommons/AbstractStartup.cs index 62c11e3ad8975bb49b6a659213743b5dfe508415..f10de52ec9280780d94f56efa4a93f0f3932fe22 100644 --- a/src/ApiCommons/AbstractStartup.cs +++ b/src/ApiCommons/AbstractStartup.cs @@ -1,5 +1,5 @@ using Coscine.ApiCommons.Middleware; -using Coscine.ApiCommons.Utils; +using Coscine.JwtHandler; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -43,6 +43,8 @@ namespace Coscine.ApiCommons x.SaveToken = true; x.TokenValidationParameters = new TokenValidationParameters { + ValidAudience = "https://coscine.rwth-aachen.de", + ValidIssuer = "https://coscine.rwth-aachen.de", ValidateIssuerSigningKey = true, IssuerSigningKey = key, ValidateIssuer = false, @@ -94,4 +96,4 @@ namespace Coscine.ApiCommons } } -} +} \ No newline at end of file diff --git a/src/ApiCommons/ApiCommons.csproj b/src/ApiCommons/ApiCommons.csproj index e909d60a3e596a4e13d6282f245decf5835d0a65..8fa99975470dd6f75354eca5dd25084dfe466c08 100644 --- a/src/ApiCommons/ApiCommons.csproj +++ b/src/ApiCommons/ApiCommons.csproj @@ -4,8 +4,6 @@ <Import Project="..\packages\NSwag.AspNetCore.13.6.2\build\NSwag.AspNetCore.props" Condition="Exists('..\packages\NSwag.AspNetCore.13.6.2\build\NSwag.AspNetCore.props')" /> <Import Project="..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props')" /> <Import Project="..\packages\NUnit.3.12.0\build\NUnit.props" Condition="Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" /> - <Import Project="..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props" Condition="Exists('..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props')" /> - <Import Project="..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props" Condition="Exists('..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props')" /> <Import Project="..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\build\Microsoft.CodeAnalysis.Analyzers.props" Condition="Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\build\Microsoft.CodeAnalysis.Analyzers.props')" /> <Import Project="..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props" Condition="Exists('..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props')" /> <Import Project="..\packages\Microsoft.AspNetCore.Razor.Design.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Razor.Design.props" Condition="Exists('..\packages\Microsoft.AspNetCore.Razor.Design.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Razor.Design.props')" /> @@ -54,11 +52,14 @@ <Reference Include="Coscine.Configuration, Version=1.5.0.0, Culture=neutral, PublicKeyToken=ce3d7a32d7dc1e5a, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Configuration.1.5.0\lib\net461\Coscine.Configuration.dll</HintPath> </Reference> - <Reference Include="Coscine.Database, Version=1.24.0.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.24.0\lib\net461\Coscine.Database.dll</HintPath> + <Reference Include="Coscine.Database, Version=1.26.1.0, Culture=neutral, PublicKeyToken=767d77427707b70a, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.26.1-topic-1125-apito0012\lib\net461\Coscine.Database.dll</HintPath> </Reference> - <Reference Include="Coscine.Database.T4, Version=1.24.0.0, Culture=neutral, PublicKeyToken=84b4c404a0696261, processorArchitecture=MSIL"> - <HintPath>..\packages\Coscine.Database.1.24.0\lib\net461\Coscine.Database.T4.dll</HintPath> + <Reference Include="Coscine.Database.T4, Version=1.26.1.0, Culture=neutral, PublicKeyToken=84b4c404a0696261, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.Database.1.26.1-topic-1125-apito0012\lib\net461\Coscine.Database.T4.dll</HintPath> + </Reference> + <Reference Include="Coscine.JwtHandler, Version=1.2.0.0, Culture=neutral, PublicKeyToken=aaacf41df3a6253c, processorArchitecture=MSIL"> + <HintPath>..\packages\Coscine.JwtHandler.1.2.0-topic-1125-apito0006\lib\net461\Coscine.JwtHandler.dll</HintPath> </Reference> <Reference Include="Coscine.Logging, Version=1.2.0.0, Culture=neutral, PublicKeyToken=e1ed402bc3f6525e, processorArchitecture=MSIL"> <HintPath>..\packages\Coscine.Logging.1.2.0\lib\net461\Coscine.Logging.dll</HintPath> @@ -292,11 +293,11 @@ <Reference Include="Microsoft.Extensions.WebEncoders, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Extensions.WebEncoders.2.2.0\lib\netstandard2.0\Microsoft.Extensions.WebEncoders.dll</HintPath> </Reference> - <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.5.5.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath> + <Reference Include="Microsoft.IdentityModel.JsonWebTokens, Version=6.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.JsonWebTokens.6.7.1\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll</HintPath> </Reference> - <Reference Include="Microsoft.IdentityModel.Logging, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\packages\Microsoft.IdentityModel.Logging.5.5.0\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath> + <Reference Include="Microsoft.IdentityModel.Logging, Version=6.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.Logging.6.7.1\lib\net461\Microsoft.IdentityModel.Logging.dll</HintPath> </Reference> <Reference Include="Microsoft.IdentityModel.Protocols, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.IdentityModel.Protocols.5.3.0\lib\net461\Microsoft.IdentityModel.Protocols.dll</HintPath> @@ -304,8 +305,8 @@ <Reference Include="Microsoft.IdentityModel.Protocols.OpenIdConnect, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.IdentityModel.Protocols.OpenIdConnect.5.3.0\lib\net461\Microsoft.IdentityModel.Protocols.OpenIdConnect.dll</HintPath> </Reference> - <Reference Include="Microsoft.IdentityModel.Tokens, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\packages\Microsoft.IdentityModel.Tokens.5.5.0\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath> + <Reference Include="Microsoft.IdentityModel.Tokens, Version=6.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\Microsoft.IdentityModel.Tokens.6.7.1\lib\net461\Microsoft.IdentityModel.Tokens.dll</HintPath> </Reference> <Reference Include="Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL"> <HintPath>..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll</HintPath> @@ -365,13 +366,10 @@ <Reference Include="System.Data.Linq" /> <Reference Include="System.Data.OracleClient" /> <Reference Include="System.Drawing" /> - <Reference Include="System.IdentityModel.Tokens.Jwt, Version=5.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> - <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.5.5.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath> + <Reference Include="System.IdentityModel.Tokens.Jwt, Version=6.7.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <HintPath>..\packages\System.IdentityModel.Tokens.Jwt.6.7.1\lib\net461\System.IdentityModel.Tokens.Jwt.dll</HintPath> </Reference> <Reference Include="System.Management" /> - <Reference Include="System.Memory, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> - <HintPath>..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll</HintPath> - </Reference> <Reference Include="System.Net" /> <Reference Include="System.Net.Http.WebRequest" /> <Reference Include="System.Numerics" /> @@ -423,7 +421,6 @@ <Compile Include="Middleware\TOSMiddleware.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="AbstractDefaultStartup.cs" /> - <Compile Include="Utils\JWTHandler.cs" /> <Compile Include="Middleware\LoggingMiddleware.cs" /> </ItemGroup> <ItemGroup> @@ -440,8 +437,6 @@ <Error Condition="!Exists('..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.props'))" /> <Error Condition="!Exists('..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0\build\netstandard2.0\Microsoft.AspNetCore.Mvc.Razor.Extensions.targets'))" /> <Error Condition="!Exists('..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\build\Microsoft.CodeAnalysis.Analyzers.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeAnalysis.Analyzers.2.9.2\build\Microsoft.CodeAnalysis.Analyzers.props'))" /> - <Error Condition="!Exists('..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\linq2db.SqlServer.2.6.4\build\linq2db.SqlServer.props'))" /> - <Error Condition="!Exists('..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\linq2db.t4models.2.6.4\build\linq2db.t4models.props'))" /> <Error Condition="!Exists('..\packages\NUnit.3.12.0\build\NUnit.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NUnit.3.12.0\build\NUnit.props'))" /> <Error Condition="!Exists('..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.props'))" /> <Error Condition="!Exists('..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Extensions.ApiDescription.Server.3.0.0\build\Microsoft.Extensions.ApiDescription.Server.targets'))" /> diff --git a/src/ApiCommons/Authenticator.cs b/src/ApiCommons/Authenticator.cs index c3466da1c7caf64c065f6de9f235d363ce5aac20..4851093ab7698d7381e2854100e12924f98b2d84 100644 --- a/src/ApiCommons/Authenticator.cs +++ b/src/ApiCommons/Authenticator.cs @@ -1,10 +1,12 @@ -using Coscine.ApiCommons.Utils; -using Coscine.Configuration; +using Coscine.Configuration; using Coscine.Database.DataModel; using Coscine.Database.Models; +using Coscine.JwtHandler; using Microsoft.AspNetCore.Mvc; using System; +using System.Collections.Generic; using System.Linq; +using System.Security.Claims; namespace Coscine.ApiCommons { @@ -12,6 +14,7 @@ namespace Coscine.ApiCommons { private readonly Controller _controller; private readonly IConfiguration _configuration; + private static readonly ApiTokenModel _apiTokenModel = new ApiTokenModel(); public Authenticator(Controller controller, IConfiguration configuration) { @@ -33,17 +36,43 @@ namespace Coscine.ApiCommons return true; } - public string GetUserId() + public static string GetUserId(IEnumerable<Claim> claims) { try { - return _controller.HttpContext.User.FindFirst("UserID").Value; - } catch (NullReferenceException) + var userId = claims.Where(x => x.Type.ToLower() == "userId".ToLower()).FirstOrDefault()?.Value; + var tokenId = claims.Where(x => x.Type.ToLower() == "tokenId".ToLower()).FirstOrDefault()?.Value; + + // Only one can be set + if (userId != null && tokenId != null) + { + return null; + } + + if (userId != null) + { + return userId; + } + + if (tokenId != null) + { + var token = _apiTokenModel.GetById(new Guid(tokenId)); + return token.UserId.ToString(); + } + + return null; + } + catch (NullReferenceException) { return null; } } + public string GetUserId() + { + return GetUserId(_controller.HttpContext.User.Claims); + } + public User GetUser() { return GetUser(GetUserId()); diff --git a/src/ApiCommons/Middleware/LoggingMiddleware.cs b/src/ApiCommons/Middleware/LoggingMiddleware.cs index 7e2b59c73a7bfa3e18c178b86d8ee72a77871e38..8538c981a7ac247b264db8a6703ba2f1a415f0b5 100644 --- a/src/ApiCommons/Middleware/LoggingMiddleware.cs +++ b/src/ApiCommons/Middleware/LoggingMiddleware.cs @@ -1,14 +1,12 @@ -using Coscine.ApiCommons.Utils; -using Coscine.Configuration; +using Coscine.Configuration; +using Coscine.JwtHandler; using Coscine.Logging; -using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Primitives; using System; using System.IO; -using System.Linq; using System.Threading.Tasks; namespace Coscine.ApiCommons.Middleware @@ -29,7 +27,7 @@ namespace Coscine.ApiCommons.Middleware if (context.Request.Path.Value.Contains("TOS")) { await _next(context); - } + } else { string _uri = ""; @@ -78,10 +76,11 @@ namespace Coscine.ApiCommons.Middleware bearer = bearer.Replace("Bearer", "").Trim(); JWTHandler jwtHandler = new JWTHandler(new ConsulConfiguration()); var claims = jwtHandler.GetContents(bearer); - var userClaim = (from claimObj in claims - where claimObj.Type == "UserId" - select claimObj).First(); - CoscineLoggerMetadata.SetUserId(userClaim.Value); + var userId = Authenticator.GetUserId(claims); + if (userId != null) + { + CoscineLoggerMetadata.SetUserId(userId); + } } // Get the corrolation Id @@ -90,7 +89,7 @@ namespace Coscine.ApiCommons.Middleware { CoscineLoggerMetadata.SetClientCorrolationId(clientCorrolationId.ToString()); } - CoscineLoggerMetadata.SetCorrolationId(); + CoscineLoggerMetadata.SetCorrolationId(); /******************************************* * preparation of the logging process @@ -160,7 +159,7 @@ namespace Coscine.ApiCommons.Middleware { _responseBody = "No Response Body or Response Body to long."; } - + responseBodyStream.Seek(0, SeekOrigin.Begin); await responseBodyStream.CopyToAsync(originalResponseBody); } diff --git a/src/ApiCommons/Properties/AssemblyInfo.cs b/src/ApiCommons/Properties/AssemblyInfo.cs index 7c969d421bd32dae55d23e98d4815f393649f124..36bfc36a9c366713897192c513ede382b4041059 100644 --- a/src/ApiCommons/Properties/AssemblyInfo.cs +++ b/src/ApiCommons/Properties/AssemblyInfo.cs @@ -9,8 +9,8 @@ using System.Reflection; [assembly: AssemblyDescription("ApiCommons is a part of the CoScInE group.")] [assembly: AssemblyCompany("IT Center, RWTH Aachen University")] [assembly: AssemblyProduct("ApiCommons")] -[assembly: AssemblyVersion("1.9.0")] -[assembly: AssemblyFileVersion("1.9.0")] -[assembly: AssemblyInformationalVersion("1.9.0-topic-827-notifi0001")] +[assembly: AssemblyVersion("1.10.1")] +[assembly: AssemblyFileVersion("1.10.1")] +[assembly: AssemblyInformationalVersion("1.10.1-topic-1123-token0014")] [assembly: AssemblyCopyright("2020 IT Center, RWTH Aachen University")] diff --git a/src/ApiCommons/Utils/JWTHandler.cs b/src/ApiCommons/Utils/JWTHandler.cs deleted file mode 100644 index e91cab36f28a51bb69a0c240030c55d6b60f8a3f..0000000000000000000000000000000000000000 --- a/src/ApiCommons/Utils/JWTHandler.cs +++ /dev/null @@ -1,104 +0,0 @@ -using Coscine.ApiCommons.Exceptions; -using Coscine.Configuration; -using Microsoft.IdentityModel.Tokens; -using System; -using System.Collections.Generic; -using System.IdentityModel.Tokens.Jwt; -using System.Linq; -using System.Security.Claims; -using System.Text; -using System.Threading.Tasks; - -namespace Coscine.ApiCommons.Utils -{ - public class JWTHandler - { - private readonly IConfiguration _configuration; - private readonly JwtSecurityTokenHandler _jwtSecurityTokenHandler; - - public JWTHandler(IConfiguration configuration) - { - _configuration = configuration; - _jwtSecurityTokenHandler = new JwtSecurityTokenHandler(); - } - - public SymmetricSecurityKey GetSecurityKey() - { - string secretKey = _configuration.GetStringAndWait("coscine/global/jwtsecret"); - - if (secretKey == null) - { - throw new ArgumentNullException("JWT Secret Configuration value is not set!"); - } - - return new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey)); - } - - public bool ValidToken(string token, string encryptionAlgorithm = "HS256") - { - - TokenValidationParameters tokenValidationParameters = new TokenValidationParameters - { - IssuerSigningKey = GetSecurityKey(), - // TODO: Validate those two - ValidateAudience = false, - ValidateIssuer = false - }; - - try - { - _jwtSecurityTokenHandler.ValidateToken(token, tokenValidationParameters, out SecurityToken securityToken); - } - catch (Exception) - { - return false; - } - return true; - } - - public IEnumerable<Claim> GetContents(string jwt, string encryptionAlgorithm = "HS256") - { - if (ValidToken(jwt, encryptionAlgorithm)) - { - var token = _jwtSecurityTokenHandler.ReadJwtToken(jwt); - return token.Claims; - } - else - { - throw new InvalidTokenException("Invalid token!"); - } - } - - public string GenerateJwtToken(JwtPayload payload, string encryptionAlgorithm = "HS256") - { - if (payload == null) - { - throw new ArgumentNullException("JwtPayload value is not set!"); - } - - var signingCredentials = new SigningCredentials(GetSecurityKey(), encryptionAlgorithm); - - var centuryBegin = new DateTime(1970, 1, 1); - var exp = new TimeSpan(DateTime.Now.AddMinutes(30).Ticks - centuryBegin.Ticks).TotalSeconds; - var now = new TimeSpan(DateTime.Now.Ticks - centuryBegin.Ticks).TotalSeconds; - - payload.Add("iss", "coscine"); - payload.Add("aud", "coscine"); - payload.Add("iat", (long)now); - payload.Add("exp", (long)exp); - - var header = new JwtHeader(signingCredentials); - var securityToken = new JwtSecurityToken(header, payload); - - return _jwtSecurityTokenHandler.WriteToken(securityToken); - } - - public string GenerateJwtToken(IReadOnlyDictionary<string, string> payloadContents, string encryptionAlgorithm = "HS256") - { - var payload = new JwtPayload(payloadContents.Select(c => new Claim(c.Key, c.Value))); - - return GenerateJwtToken(payload, encryptionAlgorithm); - } - - } -} diff --git a/src/ApiCommons/app.config b/src/ApiCommons/app.config index 13bafa5253db41186ae3086aecc0226befaf5986..77d17c189ca1e89528190c0648d4587910f0c000 100644 --- a/src/ApiCommons/app.config +++ b/src/ApiCommons/app.config @@ -96,15 +96,15 @@ </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Logging" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-6.7.1.0" newVersion="6.7.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-6.7.1.0" newVersion="6.7.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.IdentityModel.Tokens.Jwt" publicKeyToken="31bf3856ad364e35" culture="neutral" /> - <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" /> + <bindingRedirect oldVersion="0.0.0.0-6.7.1.0" newVersion="6.7.1.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="Coscine.Configuration" publicKeyToken="ce3d7a32d7dc1e5a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.5.0.0" newVersion="1.5.0.0" /> diff --git a/src/ApiCommons/packages.config b/src/ApiCommons/packages.config index eca90e7a9e7fa8d1d6ebd0c93e13c34ba1ea6caa..ec9341a5460e840444f47fd4c222f381d7aec0d7 100644 --- a/src/ApiCommons/packages.config +++ b/src/ApiCommons/packages.config @@ -2,12 +2,11 @@ <packages> <package id="Consul" version="0.7.2.6" targetFramework="net472" /> <package id="Coscine.Configuration" version="1.5.0" targetFramework="net461" /> - <package id="Coscine.Database" version="1.24.0" targetFramework="net461" /> + <package id="Coscine.Database" version="1.26.1-topic-1125-apito0012" targetFramework="net461" /> + <package id="Coscine.JwtHandler" version="1.2.0-topic-1125-apito0006" targetFramework="net461" /> <package id="Coscine.Logging" version="1.2.0" targetFramework="net461" /> <package id="EntityFramework" version="6.4.4" targetFramework="net461" /> <package id="linq2db" version="3.1.1" targetFramework="net461" /> - <package id="linq2db.SqlServer" version="2.6.4" targetFramework="net472" /> - <package id="linq2db.t4models" version="2.6.4" targetFramework="net472" /> <package id="LinqKit" version="1.1.17" targetFramework="net461" /> <package id="Microsoft.AspNetCore.Antiforgery" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.AspNetCore.Authentication" version="2.2.0" targetFramework="net461" /> @@ -94,11 +93,11 @@ <package id="Microsoft.Extensions.Options" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.Extensions.Primitives" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.Extensions.WebEncoders" version="2.2.0" targetFramework="net472" /> - <package id="Microsoft.IdentityModel.JsonWebTokens" version="5.5.0" targetFramework="net472" /> - <package id="Microsoft.IdentityModel.Logging" version="5.5.0" targetFramework="net472" /> + <package id="Microsoft.IdentityModel.JsonWebTokens" version="6.7.1" targetFramework="net461" /> + <package id="Microsoft.IdentityModel.Logging" version="6.7.1" targetFramework="net461" /> <package id="Microsoft.IdentityModel.Protocols" version="5.3.0" targetFramework="net461" /> <package id="Microsoft.IdentityModel.Protocols.OpenIdConnect" version="5.3.0" targetFramework="net461" /> - <package id="Microsoft.IdentityModel.Tokens" version="5.5.0" targetFramework="net472" /> + <package id="Microsoft.IdentityModel.Tokens" version="6.7.1" targetFramework="net461" /> <package id="Microsoft.Net.Http.Headers" version="2.2.0" targetFramework="net472" /> <package id="Microsoft.Win32.Registry" version="4.5.0" targetFramework="net472" /> <package id="Namotion.Reflection" version="1.0.11" targetFramework="net461" /> @@ -127,7 +126,7 @@ <package id="System.Diagnostics.StackTrace" version="4.3.0" targetFramework="net472" /> <package id="System.Dynamic.Runtime" version="4.3.0" targetFramework="net472" /> <package id="System.Globalization" version="4.3.0" targetFramework="net472" /> - <package id="System.IdentityModel.Tokens.Jwt" version="5.5.0" targetFramework="net472" /> + <package id="System.IdentityModel.Tokens.Jwt" version="6.7.1" targetFramework="net461" /> <package id="System.IO" version="4.3.0" targetFramework="net472" /> <package id="System.IO.FileSystem" version="4.3.0" targetFramework="net472" /> <package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net472" />