Browse Source

Better validation of email for external oidc provider.

pull/351/head
Sebastian Stehle 8 years ago
parent
commit
4390c696e8
  1. 11
      src/Squidex/Areas/IdentityServer/Controllers/Extensions.cs
  2. 2
      src/Squidex/Areas/IdentityServer/Views/Account/Login.cshtml
  3. 1
      src/Squidex/Config/Authentication/OidcServices.cs
  4. 2
      src/Squidex/Config/Constants.cs

11
src/Squidex/Areas/IdentityServer/Controllers/Extensions.cs

@ -5,6 +5,7 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Security.Claims; using System.Security.Claims;
@ -20,7 +21,14 @@ namespace Squidex.Areas.IdentityServer.Controllers
{ {
var externalLogin = await signInManager.GetExternalLoginInfoAsync(expectedXsrf); var externalLogin = await signInManager.GetExternalLoginInfoAsync(expectedXsrf);
externalLogin.ProviderDisplayName = externalLogin.Principal.FindFirst(ClaimTypes.Email).Value; var email = externalLogin.Principal.FindFirst(ClaimTypes.Email)?.Value;
if (string.IsNullOrWhiteSpace(email))
{
throw new InvalidOperationException("External provider does not provide email claim.");
}
externalLogin.ProviderDisplayName = email;
return externalLogin; return externalLogin;
} }
@ -28,6 +36,7 @@ namespace Squidex.Areas.IdentityServer.Controllers
public static async Task<List<ExternalProvider>> GetExternalProvidersAsync(this SignInManager<IdentityUser> signInManager) public static async Task<List<ExternalProvider>> GetExternalProvidersAsync(this SignInManager<IdentityUser> signInManager)
{ {
var externalSchemes = await signInManager.GetExternalAuthenticationSchemesAsync(); var externalSchemes = await signInManager.GetExternalAuthenticationSchemesAsync();
var externalProviders = var externalProviders =
externalSchemes.Where(x => x.Name != OpenIdConnectDefaults.AuthenticationScheme) externalSchemes.Where(x => x.Name != OpenIdConnectDefaults.AuthenticationScheme)
.Select(x => new ExternalProvider(x.Name, x.DisplayName)).ToList(); .Select(x => new ExternalProvider(x.Name, x.DisplayName)).ToList();

2
src/Squidex/Areas/IdentityServer/Views/Account/Login.cshtml

@ -36,7 +36,7 @@
<div class="form-group"> <div class="form-group">
<button class="btn external-button btn-block btn btn-@schema" type="submit" name="provider" value="@provider.AuthenticationScheme"> <button class="btn external-button btn-block btn btn-@schema" type="submit" name="provider" value="@provider.AuthenticationScheme">
<i class="icon-@schema external-icon"></i> @type with <strong>@provider.AuthenticationScheme</strong> <i class="icon-@schema external-icon"></i> @type with <strong>@provider.DisplayName</strong>
</button> </button>
</div> </div>
} }

1
src/Squidex/Config/Authentication/OidcServices.cs

@ -24,6 +24,7 @@ namespace Squidex.Config.Authentication
options.Authority = identityOptions.OidcAuthority; options.Authority = identityOptions.OidcAuthority;
options.ClientId = identityOptions.OidcClient; options.ClientId = identityOptions.OidcClient;
options.ClientSecret = identityOptions.OidcSecret; options.ClientSecret = identityOptions.OidcSecret;
options.Scope.Add(Constants.EmailScope);
options.Scope.Add(Constants.PermissionsScope); options.Scope.Add(Constants.PermissionsScope);
options.RequireHttpsMetadata = false; options.RequireHttpsMetadata = false;
}); });

2
src/Squidex/Config/Constants.cs

@ -23,6 +23,8 @@ namespace Squidex.Config
public static readonly string PortalPrefix = "/portal"; public static readonly string PortalPrefix = "/portal";
public static readonly string EmailScope = "email";
public static readonly string RoleScope = "role"; public static readonly string RoleScope = "role";
public static readonly string PermissionsScope = "permissions"; public static readonly string PermissionsScope = "permissions";

Loading…
Cancel
Save