Preparar el código fuente del servidor de identidades Project
Se aplica a: Windows Azure Pack
La preparación del proyecto thinktecture Identity Server Visual Studio requiere la descarga del código fuente del proyecto de GitHub, lo que garantiza que se instalan los paquetes de NuGet correctos y se realizan actualizaciones necesarias en el código fuente.
El código fuente original de thinktecture Identity Server requiere dos actualizaciones para que funcione con Windows Azure Pack. El primer cambio agrega un nuevo valor de notificación "upn" y el segundo agrega un valor para satisfacer los requisitos mínimos del certificado de firma.
Por último, el sitio web de la solución debe publicarse en el destino deseado.
Preparar la solución de Visual Studio
Para preparar la solución thinktecture Identity Server Visual Studio
Descargue el Visual Studio Project thinktecture de https://github.com/thinktecture/Thinktecture.IdentityServer.v2.
Abra la solución thinktecture Identity Server en Visual Studio 2012
En Explorador de soluciones, haga clic con el botón derecho en la solución "Thinktecture.IdentityServer" y seleccione Administrar paquetes de NuGet para la solución para abrir el cuadro de diálogo Administrar paquetes de NuGet.
Seleccione el botón Restaurar para restaurar los paquetes de NuGet que faltan.
seleccione Novedades e instale las actualizaciones necesarias.
Compile la solución Thinktecture.IdentityServer.
Agregar un nuevo valor de notificación "upn"
Para trabajar correctamente con Windows Paquete de Azure, se debe agregar un nuevo valor "upn" al código fuente thinktecture Identity Serveer.
Para agregar un nuevo valor de notificación "upn"
En la solución Thinktecture.IdentityServer, abra el archivo TokenService.cs en \Libraries\Thinktecture.IdentityServer.core\TokenService.
En la función GetExternalOutputClaims, busque el código siguiente:
id.AddClaim(new Claim(Constants.Claims.IdentityProvider, idp.Name));
Coloque el código siguiente inmediatamente después:
var emailaddress = id.Claims.Single(c => c.Type == ClaimTypes.Email); id.AddClaim(new Claim("upn", emailaddress.Value));
Compile la solución y corrija los errores.
La sección de código ahora debe tener el siguiente aspecto:
protected virtual ClaimsIdentity GetExternalOutputClaims(ClaimsPrincipal principal, RequestDetails requestDetails)
{
var idpClaim = principal.FindFirst(c => c.Type == Constants.Claims.IdentityProvider && c.Issuer == Constants.InternalIssuer);
if (idpClaim == null)
{
throw new InvalidOperationException("No identity provider claim found.");
}
IdentityProvider idp = null;
if (IdentityProviderRepository.TryGet(idpClaim.Value, out idp))
{
var transformedClaims = ClaimsTransformationRulesRepository.ProcessClaims(SanitizeInternalClaims(principal), idp, requestDetails);
var id = new ClaimsIdentity(transformedClaims, "External");
id.AddClaim(new Claim(Constants.Claims.IdentityProvider, idp.Name));
var emailaddress = id.Claims.Single(c => c.Type == ClaimTypes.Email);
id.AddClaim(new Claim("upn", emailaddress.Value));
return id;
}
throw new InvalidRequestException("Invalid identity provider.");
}
Satisfacer los requisitos mínimos del certificado de firma
Los requisitos de certificado de firma deben actualizarse para que funcionen correctamente con Windows Azure Pack.
Para satisfacer los requisitos mínimos de certificado de firma
En la solución Thinktecture.IdentityServer, abra el archivo Global.asax.cs en \WebSite\Global.asax.
En la parte superior del archivo, agregue las siguientes instrucciones using:
using System.IdentityModel.Tokens; using System.Reflection;
Agregue la siguiente función al final de la clase MvcApplication.
private void HijackMinimumSigningCertificateRequirements() { var _type = typeof(SignatureProviderFactory); var _minimumAsymmetricKeySizeInBitsForSigning = _type.GetField("_minimumAsymmetricKeySizeInBitsForSigning", BindingFlags.NonPublic | BindingFlags.Static); _minimumAsymmetricKeySizeInBitsForSigning.SetValue(null, 1024u); }
Agregue una llamada a la nueva función como final del método Application_Start() con el código siguiente:
HijackMinimumSigningCertificateRequirements();
Compile la solución y corrija los errores.
Este es el aspecto que debería tener el código completado:
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Data.Entity;
using System.Security.Claims;
using System.Web.Helpers;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Thinktecture.IdentityServer.Repositories;
using Thinktecture.IdentityServer.Repositories.Sql;
using System.IdentityModel.Tokens;
using System.Reflection;
namespace Thinktecture.IdentityServer.Web
{
public class MvcApplication : System.Web.HttpApplication
{
[Import]
public IConfigurationRepository ConfigurationRepository { get; set; }
[Import]
public IUserRepository UserRepository { get; set; }
[Import]
public IRelyingPartyRepository RelyingPartyRepository { get; set; }
protected void Application_Start()
{
// create empty config database if it not exists
Database.SetInitializer(new ConfigurationDatabaseInitializer());
// set the anti CSRF for name (that's a unqiue claim in our system)
AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;
// setup MEF
SetupCompositionContainer();
Container.Current.SatisfyImportsOnce(this);
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters, ConfigurationRepository);
RouteConfig.RegisterRoutes(RouteTable.Routes, ConfigurationRepository, UserRepository);
ProtocolConfig.RegisterProtocols(GlobalConfiguration.Configuration, RouteTable.Routes, ConfigurationRepository, UserRepository, RelyingPartyRepository);
BundleConfig.RegisterBundles(BundleTable.Bundles);
HijackMinimumSigningCertificateRequirements();
}
private void SetupCompositionContainer()
{
Container.Current = new CompositionContainer(new RepositoryExportProvider());
}
private void HijackMinimumSigningCertificateRequirements()
{
var _type = typeof(SignatureProviderFactory);
var _minimumAsymmetricKeySizeInBitsForSigning = _type.GetField("_minimumAsymmetricKeySizeInBitsForSigning", BindingFlags.NonPublic | BindingFlags.Static);
_minimumAsymmetricKeySizeInBitsForSigning.SetValue(null, 1024u);
}
}
}
Publicación del código del sitio web
Una vez que la solución se haya compilado correctamente, puede publicar el código del sitio web en el sistema de archivos local o publicarlo en el servidor desde el que se ejecutará. En los pasos siguientes se muestra cómo publicar en el sistema de archivos local.
Para publicar en el sistema de archivos local
En Visual Studio Explorador de soluciones, haga clic con el botón derecho en el sitio web del proyecto y seleccione Publicar.
En la sección Perfil, seleccione <Nuevo...> en el cuadro de lista desplegable, escriba un nuevo nombre de perfil y presione Aceptar.
En la sección Conexión, seleccione Sistema de archivos en el cuadro de lista desplegable Método de publicación .
Establezca el cuadro de texto Ubicación de destino en la ubicación en la que desea publicar el sitio.
En la sección Configuración, elija la configuración que desee en el cuadro de lista desplegable Configuración. De forma predeterminada, la configuración es Release.
Revise la configuración en la sección De revisión y haga clic en Publicar para publicar el sitio web.
Consulte también
Windows proveedores de identidades de terceros de Azure Pack