diff --git a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Controllers/IdentityController.cs b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Controllers/IdentityController.cs new file mode 100644 index 0000000000..7d21381e8a --- /dev/null +++ b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Controllers/IdentityController.cs @@ -0,0 +1,28 @@ +// Copyright (c) Brock Allen & Dominick Baier. All rights reserved. +// Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. + +using System.Linq; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace MicroserviceDemo.TenancyService.Controllers +{ + [Route("[controller]")] + [Authorize] + public class IdentityController : AbpController + { + [HttpGet] + public IActionResult Get() + { + return new JsonResult(new + { + currentUserId = CurrentUser.Id, + currentUserEmail = CurrentUser.Email, + currentUserRoles = CurrentUser.Roles, + currentUserUserName = CurrentUser.UserName, + claims = from c in User.Claims select new { c.Type, c.Value } + }); + } + } +} \ No newline at end of file diff --git a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Logs/logs-20180228.txt b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Logs/logs-20180228.txt deleted file mode 100644 index fd9d23c20c..0000000000 --- a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/Logs/logs-20180228.txt +++ /dev/null @@ -1,111 +0,0 @@ -2018-02-28 10:18:23.368 +03:00 [Information] Loaded modules: -2018-02-28 10:18:23.444 +03:00 [Information] - Volo.Abp.Castle.AbpCastleCoreModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.Autofac.AbpAutofacModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.Data.AbpDataModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.Settings.AbpSettingsModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyDomainSharedModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.Guids.AbpGuidsModule -2018-02-28 10:18:23.445 +03:00 [Information] - Volo.Abp.ObjectMapping.AbpObjectMappingModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Threading.AbpThreadingModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.EventBus.AbpEventBusModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Validation.AbpValidationModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Security.AbpSecurityModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Authorization.AbpAuthorizationModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Http.AbpHttpAbstractionsModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.AbpDddModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.AutoMapper.AbpAutoMapperModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Ui.AbpUiModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyDomainModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Localization.AbpLocalizationModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Session.AbpSessionModule -2018-02-28 10:18:23.446 +03:00 [Information] - Volo.Abp.Timing.AbpTimingModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.Json.AbpJsonModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.Serialization.AbpSerializationModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.Caching.AbpCachingModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.AbpCommonModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.MultiTenancy.EntityFrameworkCore.AbpMultiTenancyEntityFrameworkCoreModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyApplicationContractsModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyApplicationModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.Http.AbpHttpModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.AspNetCore.AbpAspNetCoreModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule -2018-02-28 10:18:23.447 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyHttpApiModule -2018-02-28 10:18:23.447 +03:00 [Information] - MicroserviceDemo.TenancyService.MicroservicesDemoTenancyServiceModule -2018-02-28 10:18:24.855 +03:00 [Information] Initialized all modules. -2018-02-28 10:18:25.686 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/ -2018-02-28 10:18:26.185 +03:00 [Information] Executing action method "MicroserviceDemo.TenancyService.Controllers.HomeController.Index (MicroserviceDemo.TenancyService)" with arguments (null) - ModelState is Valid -2018-02-28 10:18:26.211 +03:00 [Information] Executing RedirectResult, redirecting to "/swagger". -2018-02-28 10:18:26.222 +03:00 [Information] Executed action "MicroserviceDemo.TenancyService.Controllers.HomeController.Index (MicroserviceDemo.TenancyService)" in 132.0196ms -2018-02-28 10:18:26.236 +03:00 [Information] Request finished in 606.1366ms 302 -2018-02-28 10:18:26.286 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/swagger/ -2018-02-28 10:18:26.322 +03:00 [Information] Request finished in 36.5045ms 200 text/html -2018-02-28 10:18:27.379 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/swagger/v1/swagger.json -2018-02-28 10:18:27.916 +03:00 [Information] Request finished in 537.0078ms 200 application/json -2018-02-28 10:26:40.794 +03:00 [Information] Loaded modules: -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Castle.AbpCastleCoreModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Autofac.AbpAutofacModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Data.AbpDataModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Settings.AbpSettingsModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyDomainSharedModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Guids.AbpGuidsModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.ObjectMapping.AbpObjectMappingModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.Threading.AbpThreadingModule -2018-02-28 10:26:40.839 +03:00 [Information] - Volo.Abp.EventBus.AbpEventBusModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Validation.AbpValidationModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Security.AbpSecurityModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Authorization.AbpAuthorizationModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Http.AbpHttpAbstractionsModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.AbpDddModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.AutoMapper.AbpAutoMapperModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Ui.AbpUiModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyDomainModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Localization.AbpLocalizationModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Session.AbpSessionModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Timing.AbpTimingModule -2018-02-28 10:26:40.840 +03:00 [Information] - Volo.Abp.Json.AbpJsonModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.Serialization.AbpSerializationModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.Caching.AbpCachingModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.AbpCommonModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.EntityFrameworkCore.AbpEntityFrameworkCoreModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.MultiTenancy.EntityFrameworkCore.AbpMultiTenancyEntityFrameworkCoreModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyApplicationContractsModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.Http.AbpHttpModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.AspNetCore.AbpAspNetCoreModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyHttpApiModule -2018-02-28 10:26:40.841 +03:00 [Information] - Volo.Abp.MultiTenancy.AbpMultiTenancyApplicationModule -2018-02-28 10:26:40.841 +03:00 [Information] - MicroserviceDemo.TenancyService.MicroservicesDemoTenancyServiceModule -2018-02-28 10:26:41.517 +03:00 [Information] Initialized all modules. -2018-02-28 10:26:41.796 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/ -2018-02-28 10:26:41.981 +03:00 [Information] Executing action method "MicroserviceDemo.TenancyService.Controllers.HomeController.Index (MicroserviceDemo.TenancyService)" with arguments (null) - ModelState is Valid -2018-02-28 10:26:41.991 +03:00 [Information] Executing RedirectResult, redirecting to "/swagger". -2018-02-28 10:26:41.997 +03:00 [Information] Executed action "MicroserviceDemo.TenancyService.Controllers.HomeController.Index (MicroserviceDemo.TenancyService)" in 48.397ms -2018-02-28 10:26:42.004 +03:00 [Information] Request finished in 223.508ms 302 -2018-02-28 10:26:42.028 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/swagger/ -2018-02-28 10:26:42.050 +03:00 [Information] Request finished in 22.5978ms 200 text/html -2018-02-28 10:26:42.363 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/swagger/v1/swagger.json -2018-02-28 10:26:42.655 +03:00 [Information] Request finished in 291.932ms 200 application/json -2018-02-28 10:26:52.866 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/api/multi-tenancy/tenant?SkipCount=0&MaxResultCount=11 -2018-02-28 10:26:53.026 +03:00 [Information] Executing action method "Volo.Abp.MultiTenancy.TenantController.GetListAsync (Volo.Abp.MultiTenancy.HttpApi)" with arguments (["Volo.Abp.MultiTenancy.GetTenantsInput"]) - ModelState is Valid -2018-02-28 10:26:53.093 +03:00 [Information] Authorization was successful for user: null. -2018-02-28 10:26:54.213 +03:00 [Information] Executing ObjectResult, writing value "Microsoft.AspNetCore.Mvc.ControllerContext". -2018-02-28 10:26:54.221 +03:00 [Information] Executed action "Volo.Abp.MultiTenancy.TenantController.GetListAsync (Volo.Abp.MultiTenancy.HttpApi)" in 1324.7568ms -2018-02-28 10:26:54.222 +03:00 [Information] Request finished in 1355.0906ms 200 application/json; charset=utf-8 -2018-02-28 10:27:23.527 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/api/abp/api-definition -2018-02-28 10:27:23.537 +03:00 [Information] Executing action method "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController.Get (Volo.Abp.AspNetCore.Mvc)" with arguments (null) - ModelState is Valid -2018-02-28 10:27:23.561 +03:00 [Information] Executing ObjectResult, writing value "Microsoft.AspNetCore.Mvc.ControllerContext". -2018-02-28 10:27:23.580 +03:00 [Information] Executed action "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController.Get (Volo.Abp.AspNetCore.Mvc)" in 51.1608ms -2018-02-28 10:27:23.581 +03:00 [Information] Request finished in 54.061ms 200 application/json; charset=utf-8 -2018-02-28 10:27:23.661 +03:00 [Information] Request starting HTTP/1.1 GET http://localhost:63877/api/multi-tenancy/tenant?SkipCount=0&MaxResultCount=10&api-version=1.0 -2018-02-28 10:27:23.665 +03:00 [Information] Executing action method "Volo.Abp.MultiTenancy.TenantController.GetListAsync (Volo.Abp.MultiTenancy.HttpApi)" with arguments (["Volo.Abp.MultiTenancy.GetTenantsInput"]) - ModelState is Valid -2018-02-28 10:27:23.666 +03:00 [Information] Authorization was successful for user: null. -2018-02-28 10:27:23.688 +03:00 [Information] Executing ObjectResult, writing value "Microsoft.AspNetCore.Mvc.ControllerContext". -2018-02-28 10:27:23.690 +03:00 [Information] Executed action "Volo.Abp.MultiTenancy.TenantController.GetListAsync (Volo.Abp.MultiTenancy.HttpApi)" in 27.1663ms -2018-02-28 10:27:23.690 +03:00 [Information] Request finished in 29.127ms 200 application/json; charset=utf-8 diff --git a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroserviceDemo.TenancyService.csproj b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroserviceDemo.TenancyService.csproj index 0f2edd9d52..4e28bfadb6 100644 --- a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroserviceDemo.TenancyService.csproj +++ b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroserviceDemo.TenancyService.csproj @@ -16,6 +16,7 @@ + @@ -23,6 +24,7 @@ + diff --git a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroservicesDemoTenancyServiceModule.cs b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroservicesDemoTenancyServiceModule.cs index 5452bc7b25..39049ffc51 100644 --- a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroservicesDemoTenancyServiceModule.cs +++ b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/MicroservicesDemoTenancyServiceModule.cs @@ -6,12 +6,16 @@ using Microsoft.Extensions.DependencyInjection; using Swashbuckle.AspNetCore.Swagger; using Volo.Abp; using Volo.Abp.AspNetCore.Modularity; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.Autofac; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.MultiTenancy.EntityFrameworkCore; +using Volo.Abp.Permissions.EntityFrameworkCore; +using Volo.Abp.Security.Claims; +using Volo.Abp.Threading; namespace MicroserviceDemo.TenancyService { @@ -19,6 +23,7 @@ namespace MicroserviceDemo.TenancyService [DependsOn(typeof(AbpMultiTenancyEntityFrameworkCoreModule))] [DependsOn(typeof(AbpMultiTenancyHttpApiModule))] [DependsOn(typeof(AbpMultiTenancyApplicationModule))] + [DependsOn(typeof(AbpPermissionsEntityFrameworkCoreModule))] public class MicroservicesDemoTenancyServiceModule : AbpModule { public override void ConfigureServices(IServiceCollection services) @@ -50,9 +55,21 @@ namespace MicroserviceDemo.TenancyService options.DocInclusionPredicate((docName, description) => true); }); - services.AddAuthentication(); + services.AddAuthentication("Bearer") + .AddIdentityServerAuthentication(options => + { + options.Authority = "http://localhost:54307"; + options.RequireHttpsMetadata = false; + + options.ApiName = "multi-tenancy-api"; - services.AddAlwaysAllowPermissionChecker(); + //This should be automatically done :( + options.InboundJwtClaimTypeMap["sub"] = AbpClaimTypes.UserId; + options.InboundJwtClaimTypeMap["role"] = AbpClaimTypes.Role; + options.InboundJwtClaimTypeMap["email"] = AbpClaimTypes.Email; + }); + + //services.AddAlwaysAllowPermissionChecker(); services.AddAssemblyOf(); } @@ -61,6 +78,9 @@ namespace MicroserviceDemo.TenancyService { var app = context.GetApplicationBuilder(); + var store = context.ServiceProvider.GetRequiredService(); + var xx = AsyncHelper.RunSync(() => store.IsGrantedAsync("AbpTenantManagement.Tenants", "Role", "admin")); + app.UseStaticFiles(); app.UseSwagger(); diff --git a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/appsettings.json b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/appsettings.json index bc6cbc9ca3..18a3256de9 100644 --- a/src/MicroserviceDemo/MicroserviceDemo.TenancyService/appsettings.json +++ b/src/MicroserviceDemo/MicroserviceDemo.TenancyService/appsettings.json @@ -1,5 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=localhost;Database=MicroservicesDemo.Tenancy;Trusted_Connection=True;MultipleActiveResultSets=true" + "Default": "Server=localhost;Database=MicroservicesDemo.Tenancy;Trusted_Connection=True;MultipleActiveResultSets=true", + "AbpPermissions": "Server=localhost;Database=MicroservicesDemo.Permissions;Trusted_Connection=True;MultipleActiveResultSets=true" } } \ No newline at end of file diff --git a/src/MicroserviceDemo/MicroserviceDemo.Web/Controllers/AccountController.cs b/src/MicroserviceDemo/MicroserviceDemo.Web/Controllers/AccountController.cs index 91e40e5254..73c2e1011f 100644 --- a/src/MicroserviceDemo/MicroserviceDemo.Web/Controllers/AccountController.cs +++ b/src/MicroserviceDemo/MicroserviceDemo.Web/Controllers/AccountController.cs @@ -1,6 +1,10 @@ -using System.Threading.Tasks; +using System.Net.Http; +using System.Threading.Tasks; +using IdentityModel.Client; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Identity; +using Microsoft.AspNetCore.Mvc; +using Newtonsoft.Json.Linq; using Volo.Abp.AspNetCore.Mvc; namespace MicroserviceDemo.Web.Controllers @@ -12,5 +16,30 @@ namespace MicroserviceDemo.Web.Controllers await HttpContext.SignOutAsync(IdentityConstants.ApplicationScheme); await HttpContext.SignOutAsync("oidc"); } + + public async Task CallApiUsingUserAccessToken() + { + var accessToken = await HttpContext.GetTokenAsync("access_token"); + + var client = new HttpClient(); + client.SetBearerToken(accessToken); + var content = await client.GetStringAsync("http://localhost:63877/identity"); + + ViewBag.Json = JObject.Parse(content).ToString(); + return View("json"); + } + + public async Task CallApiUsingClientCredentials() + { + var tokenClient = new TokenClient("http://localhost:54307/connect/token", "client", "secret"); + var tokenResponse = await tokenClient.RequestClientCredentialsAsync("multi-tenancy-api"); + + var client = new HttpClient(); + client.SetBearerToken(tokenResponse.AccessToken); + var content = await client.GetStringAsync("http://localhost:63877/identity"); + + ViewBag.Json = JObject.Parse(content).ToString(); + return View("json"); + } } } diff --git a/src/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj b/src/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj index 7075a43b8c..8af2983dee 100644 --- a/src/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj +++ b/src/MicroserviceDemo/MicroserviceDemo.Web/MicroserviceDemo.Web.csproj @@ -22,6 +22,7 @@ + diff --git a/src/MicroserviceDemo/MicroserviceDemo.Web/Views/Shared/Json.cshtml b/src/MicroserviceDemo/MicroserviceDemo.Web/Views/Shared/Json.cshtml new file mode 100644 index 0000000000..ba89653efa --- /dev/null +++ b/src/MicroserviceDemo/MicroserviceDemo.Web/Views/Shared/Json.cshtml @@ -0,0 +1,3 @@ +

API response

+ +
@ViewBag.Json
\ No newline at end of file