Partager via


Préparation du code source Identity Server Project

 

S’applique à : Windows Azure Pack

La préparation du projet thinktecture Identity Server Visual Studio nécessite le téléchargement du code source du projet à partir de GitHub, en veillant à ce que les packages de NuGet corrects soient installés et en effectuant les mises à jour requises du code source.

Le code source thinktecture Identity Server d’origine nécessite deux mises à jour pour qu’elle fonctionne avec Windows Azure Pack. La première modification ajoute une nouvelle revendication « upn » et la seconde ajoute une valeur pour répondre aux exigences minimales en matière de certificat de signature.

Enfin, le site web de la solution doit être publié sur la destination souhaitée.

Préparation de la solution Visual Studio

Pour préparer la solution thinktecture Identity Server Visual Studio

  1. Téléchargez la Visual Studio Project thinktecture à partir de https://github.com/thinktecture/Thinktecture.IdentityServer.v2.

  2. Ouvrez la solution Thinktecture Identity Server dans Visual Studio 2012

  3. Dans Explorateur de solutions, cliquez avec le bouton droit sur la solution « Thinktecture.IdentityServer », puis sélectionnez Manage NuGet Packages for Solution pour ouvrir la boîte de dialogue Gérer les packages NuGet.

  4. Sélectionnez le bouton Restaurer pour restaurer les packages NuGet manquants.

  5. sélectionnez Mises à jour et installez les mises à jour requises.

  6. Générez la solution Thinktecture.IdentityServer.

Ajout d’une nouvelle revendication de valeur « upn »

Pour fonctionner correctement avec Windows Azure Pack, une nouvelle valeur « upn » doit être ajoutée au code source thinktecture Identity Serveer.

Pour ajouter une nouvelle revendication , valeur « upn »

  1. Dans la solution Thinktecture.IdentityServer, ouvrez le fichier TokenService.cs dans \Libraries\Thinktecture.IdentityServer.core\TokenService.

  2. Dans la fonction GetExternalOutputClaims, recherchez le code suivant :

    id.AddClaim(new Claim(Constants.Claims.IdentityProvider, idp.Name));
    
  3. Placez le code suivant immédiatement après :

    var emailaddress = id.Claims.Single(c => c.Type == ClaimTypes.Email);
    id.AddClaim(new Claim("upn", emailaddress.Value));
    
  4. Générez la solution et corrigez toutes les erreurs.

La section de code doit maintenant se présenter comme suit :

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.");
}

Satisfaction des exigences minimales en matière de certificat de signature

Les exigences de certificat de signature doivent être mises à jour pour fonctionner correctement avec Windows Azure Pack.

Pour répondre aux exigences minimales en matière de certificat de signature

  1. Dans la solution Thinktecture.IdentityServer, ouvrez le fichier Global.asax.cs dans \WebSite\Global.asax.

  2. En haut du fichier, ajoutez les instructions using suivantes :

    using System.IdentityModel.Tokens;
    using System.Reflection;
    
  3. Ajoutez la fonction suivante à la fin de la classe MvcApplication.

    private void HijackMinimumSigningCertificateRequirements()
            {
                var _type = typeof(SignatureProviderFactory);
                var _minimumAsymmetricKeySizeInBitsForSigning = _type.GetField("_minimumAsymmetricKeySizeInBitsForSigning", BindingFlags.NonPublic | BindingFlags.Static);
                _minimumAsymmetricKeySizeInBitsForSigning.SetValue(null, 1024u);
            }
    
  4. Ajoutez un appel pour la nouvelle fonction comme fin de la méthode Application_Start() avec le code suivant :

    HijackMinimumSigningCertificateRequirements();
    
  5. Générez la solution et corrigez toutes les erreurs.

Le code final doit se présenter comme suit :

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);

        }

    }
}

Publication du code du site web

Une fois la solution compilée avec succès, vous pouvez publier le code du site web sur le système de fichiers local ou le publier sur le serveur à partir duquel elle sera exécutée. Les étapes suivantes illustrent la publication sur le système de fichiers local

Pour publier sur le système de fichiers local

  1. Dans Visual Studio Explorateur de solutions, cliquez avec le bouton droit sur le site web du projet, puis sélectionnez Publier.

  2. Dans la section Profil, sélectionnez <Nouveau...> dans la zone de liste déroulante, entrez un nouveau nom de profil, puis appuyez sur OK.

  3. Dans la section Connexion, sélectionnez Système de fichiers dans la zone de liste déroulante Publier la méthode .

  4. Définissez la zone de texte Emplacement cible sur l’emplacement dans lequel vous souhaitez publier le site.

  5. Dans la section Paramètres, choisissez la configuration souhaitée dans la zone de liste déroulante Configuration. Par défaut, la configuration est Release.

  6. Passez en revue vos paramètres dans la section Révision, puis cliquez sur Publier pour publier le site web.

Voir aussi

Windows fournisseurs d’identité tiers Azure Pack