2009-04-22 4 views
2

Je suis en train de mettre en œuvre le scénario suivant:wsFederationHttpBinding, en passant identité utilisateur personnalisée à STS

  1. client passe ses cridentials à STS.
  2. STS applique AuthorizationPolicy personnalisé pour déterminer l'ensemble des revendications disponibles pour un utilisateur particulier et émet un jeton sécurisé.
  3. Le client transmet le jeton aux services métier qui déterminent les privilèges de l'utilisateur en fonction de l'ensemble des revendications qu'ils ont reçues du jeton.

On dirait que la première étape est le problème principal. Comme MSDN suggère un élément de message de wsFederationHttpBinding n'a pas clientCredentialsType. Par conséquent, à chaque fois que mon AuthorizationPolicy examine evaluationContext.Properties ["Identities"] il voit WindowsIdentity dedans. Je voudrais authentifier l'utilisateur par rapport au stockage personnalisé (DB).

Y a-t-il un moyen de l'accomplir avec wsFederationHttpBinding?

Répondre

1

Eh bien, voici la réponse

STS config:

<behaviors> 
    <serviceBehaviors> 
     <behavior name="STSBehaviour"> 
      <!--Custom credentials processing--> 
      <serviceCredentials> 
       <userNameAuthentication userNamePasswordValidationMode="Custom" 
             customUserNamePasswordValidatorType="SecurityTokenService.UserNameValidator, SecurityTokenService"/> 
      </serviceCredentials> 
      <!---------------------------------> 
     </behavior> 
    </serviceBehaviors> 
</behaviors> 
<bindings> 
    <wsHttpBinding> 
     <binding name="wsHttpUsername"> 
      ... 
      <security mode="Message"> 
       <message clientCredentialType="UserName" 
         negotiateServiceCredential="false" 
         establishSecurityContext="false" /> 
      </security> 
      ... 
     </binding> 
    </wsHttpBinding> 
</bindings> 
<services> 
    <service behaviorConfiguration ="STSBehaviour" 
       name="Microsoft.ServiceModel.Samples.SecurityTokenService" > 
      .... 
    </service> 
</services> 

Nom d'utilisateur validateur

public class UserNameValidator : UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     if (!VerifyCredentials(userName, password)) 
      throw new SecurityException("Invalid credentials"); 
    } 
} 
Questions connexes