Procédure : utiliser le fournisseur d’appartenances ASP.NET
Le fournisseur d’appartenances ASP.NET est une fonctionnalité qui permet aux développeurs ASP.NET de créer des sites Web permettant aux utilisateurs de créer des combinaisons uniques de nom d’utilisateur et de mot de passe. Grâce à cette fonctionnalité, les utilisateurs peuvent établir un compte avec le site et disposer d'un accès exclusif à celui-ci et à ses services. Cette approche diffère de la sécurité Windows, qui requiert que les utilisateurs disposent de comptes dans un domaine Windows. Au lieu de cela, tout utilisateur qui fournit ses informations d’identification (combinaison nom d’utilisateur/mot de passe) peut utiliser le site et ses services.
Pour obtenir un exemple d’application, consultez Fournisseur d’appartenances et de rôles. Pour des informations sur l’utilisation de la fonctionnalité Fournisseur de rôles d’ASP.NET, consultez Comment : Utiliser le fournisseur de rôle ASP.NET avec un service.
La fonctionnalité d’appartenance requiert l’utilisation d’une base de données SQL Server pour stocker les informations utilisateur. La fonctionnalité inclut également des méthodes qui consistent à poser une question aux utilisateurs qui ont oublié leur mot de passe.
Les développeurs Windows Communication Foundation (WCF) peuvent tirer parti de ces fonctionnalités à des fins de sécurité. En cas d’intégration dans une application WCF, les utilisateurs doivent fournir une combinaison nom d’utilisateur/mot de passe à l’application cliente WCF. Pour transférer les données au service WCF, utilisez une liaison qui prend en charge les informations d’identification nom d’utilisateur/mot de passe, telle que WSHttpBinding (dans la configuration, la <wsHttpBinding>) et définissez le type d’informations d’identification du client sur UserName
. Sur le service, la sécurité WCF authentifie l’utilisateur en fonction du nom et du mot de passe, et assigne également le rôle spécifié par le rôle ASP.NET.
Notes
WCF ne fournit pas de méthode visant à remplir la base de données avec les combinaisons nom d’utilisateur/mot de passe ou autres informations utilisateur.
Pour configurer le fournisseur d'appartenances
Dans le fichier Web.config, sous l’élément
<system.web>
, créez un élément<membership>
.Sous l'élément
<membership>
, créez un élément<providers>
.En guise d’enfant de l’élément
<providers>
, ajoutez un élément<clear />
afin de vider la collection de fournisseurs.Sous l’élément
<clear />
, créez un élément<add>
avec les attributs suivants définis sur des valeurs appropriées :name
,type
,connectionStringName
,applicationName
,enablePasswordRetrieval
,enablePasswordReset
,requiresQuestionAndAnswer
,requiresUniqueEmail
etpasswordFormat
. L'attributname
est utilisé ultérieurement comme valeur dans le fichier de configuration. L'exemple suivant lui affecte la valeurSqlMembershipProvider
.L'exemple suivant présente la section de configuration.
<!-- Configure the Sql Membership Provider --> <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15"> <providers> <clear /> <add name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="SqlConn" applicationName="MembershipAndRoleProviderSample" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" passwordFormat="Hashed" /> </providers> </membership>
Pour configurer la sécurité de service afin d'accepter la combinaison nom d'utilisateur/mot de passe
Dans le fichier de configuration, sous l’élément <system.serviceModel>, ajoutez un élément <bindings>.
Ajoutez une <wsHttpBinding> à la section des liaisons. Pour plus d’informations sur la création d’une liaison, consultez le Guide pratique pour spécifier une liaison de service dans la configuration.
Affectez à l'attribut
mode
de l'élément<security>
la valeurMessage
.Affectez à l’attribut
clientCredentialType
de l’élément<message>
la valeurUserName
. Cela spécifie qu'une paire nom d'utilisateur/mot de passe sera utilisée comme information d'identification du client.L’exemple suivant présente le code de configuration de la liaison.
<system.serviceModel> <bindings> <wsHttpBinding> <!-- Set up a binding that uses UserName as the client credential type --> <binding name="MembershipBinding"> <security mode ="Message"> <message clientCredentialType ="UserName"/> </security> </binding> </wsHttpBinding> </bindings> </system.serviceModel>
Pour configurer un service permettant d'utiliser le fournisseur d'appartenances
En guise d’enfant de l’élément
<system.serviceModel>
, ajoutez un élément <behaviors>Ajoutez un élément <serviceBehaviors> à l’élément
<behaviors>
.Ajoutez un élément <behavior>, puis affectez à l’attribut
name
une valeur appropriée.Ajoutez des <serviceCredentials> à l’élément
<behavior>
.Ajoutez une <userNameAuthentication> à l’élément
<serviceCredentials>
.Affectez à l'attribut
userNamePasswordValidationMode
la valeurMembershipProvider
.Important
Si la valeur
userNamePasswordValidationMode
n’est pas définie, WCF utilise l’authentification Windows au lieu du fournisseur d’appartenances ASP.NET.Affectez à l'attribut
membershipProviderName
le nom du fournisseur (spécifié lors de l'ajout du fournisseur dans la première procédure de cette rubrique). L'exemple suivant présente le fragment<serviceCredentials>
à ce point.<behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> <serviceCredentials> <userNameAuthentication userNamePasswordValidationMode="MembershipProvider" membershipProviderName="SqlMembershipProvider" /> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
Exemple
Le code suivant montre la configuration d’un service qui utilise la fonctionnalité d’appartenance ASP.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="Microsoft.Samples.GettingStarted.CalculatorService">
<endpoint address="http://microsoft.com/WCFservices/Calculator"
binding="wsHttpBinding" bindingConfiguration="MembershipBinding"
name="ASPmemberUserName" contract="Microsoft.Samples.GettingStarted.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="MembershipProvider"
membershipProviderName="SqlMembershipProvider" />
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="MembershipBinding">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>