Browse Source

Added temporary code for identity server multitenancy

pull/221/head
Halil İbrahim Kalkan 9 years ago
parent
commit
239cde8cda
  1. 5
      src/MicroserviceDemo/MicroserviceDemo.AuthServer/MicroservicesAuthServerModule.cs
  2. 18
      src/MicroserviceDemo/MicroserviceDemo.Web/MicroservicesDemoWebModule.cs
  3. 38
      src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/Login.cshtml.cs
  4. 8
      src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs
  5. 7
      src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolverConsts.cs

5
src/MicroserviceDemo/MicroserviceDemo.AuthServer/MicroservicesAuthServerModule.cs

@ -97,11 +97,12 @@ namespace MicroserviceDemo.AuthServer
app.UseDeveloperExceptionPage(); app.UseDeveloperExceptionPage();
} }
app.UseMultiTenancy();
app.UseStaticFiles(); app.UseStaticFiles();
app.UseVirtualFiles(); app.UseVirtualFiles();
app.UseAuthentication(); //TODO: This makes it twice since UseIdentityServer also internally adds UseAuthentication!
app.UseMultiTenancy();
app.UseIdentityServer(); //This internally adds .UseAuthentication() (we should be carefully about that) app.UseIdentityServer(); //This internally adds .UseAuthentication() (we should be carefully about that)
app.UseMvc(routes => app.UseMvc(routes =>

18
src/MicroserviceDemo/MicroserviceDemo.Web/MicroservicesDemoWebModule.cs

@ -1,4 +1,5 @@
using System; using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication.OAuth.Claims; using Microsoft.AspNetCore.Authentication.OAuth.Claims;
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Hosting;
@ -69,9 +70,9 @@ namespace MicroserviceDemo.Web
{ {
"/Abp/ApplicationConfigurationScript?_v=" + DateTime.Now.Ticks, "/Abp/ApplicationConfigurationScript?_v=" + DateTime.Now.Ticks,
"/Abp/ServiceProxyScript?_v=" + DateTime.Now.Ticks "/Abp/ServiceProxyScript?_v=" + DateTime.Now.Ticks
}); });
}); });
services.AddAuthentication(options => services.AddAuthentication(options =>
{ {
options.DefaultChallengeScheme = "oidc"; options.DefaultChallengeScheme = "oidc";
@ -97,6 +98,19 @@ namespace MicroserviceDemo.Web
options.Scope.Add("multi-tenancy-api"); options.Scope.Add("multi-tenancy-api");
options.ClaimActions.MapAbpClaimTypes(); options.ClaimActions.MapAbpClaimTypes();
options.Events.OnRedirectToIdentityProvider += context =>
{
//TODO: ...
var tenantId = context.HttpContext.RequestServices.GetRequiredService<ICurrentTenant>().Id?.ToString();
if (!tenantId.IsNullOrEmpty())
{
context.ProtocolMessage.Parameters[TenantResolverConsts.DefaultTenantKey] = tenantId;
}
return Task.CompletedTask;
};
}); });
services.Configure<RemoteServiceOptions>(configuration); services.Configure<RemoteServiceOptions>(configuration);

38
src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/Login.cshtml.cs

@ -18,6 +18,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Volo.Abp.Account.Web.Auth; using Volo.Abp.Account.Web.Auth;
using Volo.Abp.Identity; using Volo.Abp.Identity;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Ui; using Volo.Abp.Ui;
using Volo.Abp.Uow; using Volo.Abp.Uow;
@ -55,12 +56,12 @@ namespace Volo.Abp.Account.Web.Pages.Account
private readonly IEventService _identityServerEvents; private readonly IEventService _identityServerEvents;
public IdsLoginModel( public IdsLoginModel(
SignInManager<IdentityUser> signInManager, SignInManager<IdentityUser> signInManager,
IdentityUserManager userManager, IdentityUserManager userManager,
IIdentityServerInteractionService interaction, IIdentityServerInteractionService interaction,
IAuthenticationSchemeProvider schemeProvider, IAuthenticationSchemeProvider schemeProvider,
IOptions<AbpAccountOptions> accountOptions, IOptions<AbpAccountOptions> accountOptions,
IClientStore clientStore, IClientStore clientStore,
IEventService identityServerEvents) IEventService identityServerEvents)
{ {
_signInManager = signInManager; _signInManager = signInManager;
@ -77,12 +78,29 @@ namespace Volo.Abp.Account.Web.Pages.Account
LoginInput = new LoginInputModel(); LoginInput = new LoginInputModel();
var context = await _interaction.GetAuthorizationContextAsync(ReturnUrl); var context = await _interaction.GetAuthorizationContextAsync(ReturnUrl);
LoginInput.UserNameOrEmailAddress = context?.LoginHint;
if (context != null)
{
LoginInput.UserNameOrEmailAddress = context.LoginHint;
//TODO: !!! Always exchanging tenant id, not name!
var tenant = context.Parameters[TenantResolverConsts.DefaultTenantKey];
if (tenant.IsNullOrEmpty())
{
Response.Cookies.Delete(TenantResolverConsts.DefaultTenantKey);
CurrentTenant.Change(null);
}
else
{
Response.Cookies.Append(TenantResolverConsts.DefaultTenantKey, tenant);
CurrentTenant.Change(Guid.Parse(tenant));
}
}
if (context?.IdP != null) if (context?.IdP != null)
{ {
LoginInput.UserNameOrEmailAddress = context.LoginHint; LoginInput.UserNameOrEmailAddress = context.LoginHint;
ExternalProviders = new[] {new ExternalProviderModel {AuthenticationScheme = context.IdP}}; ExternalProviders = new[] { new ExternalProviderModel { AuthenticationScheme = context.IdP } };
return; return;
} }
@ -111,7 +129,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
} }
} }
} }
ExternalProviders = providers.ToArray(); ExternalProviders = providers.ToArray();
if (IsExternalLoginOnly) if (IsExternalLoginOnly)
@ -165,7 +183,7 @@ namespace Volo.Abp.Account.Web.Pages.Account
return Redirect(ReturnUrl); //ReturnUrlHash? return Redirect(ReturnUrl); //ReturnUrlHash?
} }
[UnitOfWork] [UnitOfWork]
public virtual async Task<IActionResult> OnPostExternalLogin(string provider) public virtual async Task<IActionResult> OnPostExternalLogin(string provider)
{ {

8
src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/AspNetCoreMultiTenancyOptions.cs

@ -1,15 +1,17 @@
namespace Volo.Abp.AspNetCore.MultiTenancy using Volo.Abp.MultiTenancy;
namespace Volo.Abp.AspNetCore.MultiTenancy
{ {
public class AspNetCoreMultiTenancyOptions public class AspNetCoreMultiTenancyOptions
{ {
/// <summary> /// <summary>
/// Default: "__tenant". /// Default: <see cref="TenantResolverConsts.DefaultTenantKey"/>.
/// </summary> /// </summary>
public string TenantKey { get; set; } public string TenantKey { get; set; }
public AspNetCoreMultiTenancyOptions() public AspNetCoreMultiTenancyOptions()
{ {
TenantKey = "__tenant"; TenantKey = TenantResolverConsts.DefaultTenantKey;
} }
} }
} }

7
src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantResolverConsts.cs

@ -0,0 +1,7 @@
namespace Volo.Abp.MultiTenancy
{
public class TenantResolverConsts
{
public const string DefaultTenantKey = "__tenant";
}
}
Loading…
Cancel
Save