Comment puis-je m'authentifier une seule fois à l'aide des informations d'identification du client dans WCF ?

StackOverflow https://stackoverflow.com/questions/30800

Question

Quelle est la meilleure approche pour vous assurer que vous n’avez besoin de vous authentifier qu’une seule fois lorsque vous utilisez une API construite sur WCF ?

Mes liaisons et comportements actuels sont répertoriés ci-dessous

    <bindings>
        <wsHttpBinding>
            <binding name="wsHttp">
                <security mode="TransportWithMessageCredential">
                    <transport/>
                    <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="true"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    </behaviors>

Voici ensuite ce que j'utilise dans mon application client pour m'authentifier (actuellement, je dois le faire à chaque fois que je veux passer un appel dans WCF)

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "foo"
client.ClientCredentials.UserName.Password = "bar"
Dim ProductList As List(Of Product) = client.GetProducts()

Ce que je voudrais faire, c'est m'authentifier avec l'API une fois que j'ai utilisé ces informations d'identification, puis obtenir un type de jeton pour la période pendant laquelle mon application client utilise le projet de service Web.Je pensais que establishmentsecuritycontext=true avait fait ça pour moi ?

Était-ce utile?

La solution

Si vous êtes sur un intranet, l'authentification Windows peut être gérée « gratuitement » par la seule configuration.

Si cela n'est pas approprié, les services de jetons fonctionnent très bien, mais dans certaines situations, ils peuvent être tout simplement trop importants.

L'application sur laquelle je travaille nécessitait une authentification simple.Notre serveur et notre client fonctionnent dans un intranet (très sécurisé), nous ne nous soucions donc pas trop de l'obligation d'utiliser un certificat X.509 pour crypter la communication, ce qui est requis si vous utilisez l'authentification par nom d'utilisateur.

Nous avons donc ajouté un comportement personnalisé au client qui ajoute le nom d'utilisateur et le mot de passe (chiffré) aux en-têtes du message, et un autre comportement personnalisé sur le serveur qui les vérifie.

Tout cela est très simple et ne nécessite aucune modification de la couche d’accès au service côté client ou de la mise en œuvre du contrat de service.Et comme tout se fait par configuration, si et quand nous devons passer à quelque chose d'un peu plus puissant, il sera facile de migrer.

Autres conseils

Même si je déteste donner une réponse dont je ne suis pas sûr à 100 %, le manque de réponses jusqu'à présent me fait penser qu'une réponse potentiellement correcte pourrait être acceptable dans ce cas.

Pour autant que je sache, il n'existe pas le type de mécanisme de jeton de session que vous recherchez avec WCF, ce qui signifie que vous devrez faire un gros travail pour que les choses fonctionnent dans le comme tu veux.Je dois préciser qu'il existe un mécanisme de session dans WCF, mais il vise à garantir l'ordre des messages et n'est pas l'outil idéal pour créer une session d'authentification.

Je viens de terminer de travailler sur un projet dans lequel nous avons implémenté notre propre mécanisme de session pour gérer toutes sortes de piles SOAP héritées, mais je pense que la méthode recommandée pour implémenter des sessions authentifiées est d'utiliser un service de jeton sécurisé (STS) comme Celui de Pablo Cibraro.

Si vous voulez plus de détails, n'hésitez pas à crier, mais je pense que le blog de Pablo contiendra suffisamment d'informations pour que vous puissiez aller de l'avant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top