2009-04-22 96 views
2

我试图实施以下情形:wsFederationHttpBinding,将自定义用户身份STS

  1. 客户通过它cridentials到STS。
  2. STS应用自定义AuthorizationPolicy来确定可供特定用户使用的一组声明,并发出安全令牌。
  3. 客户端将令牌传递给业务服务,该业务服务根据他们从令牌获得的一组索赔确定用户的特权。

看起来像第一步是主要问题。由于 MSDN建议wsFederationHttpBinding的消息元素没有clientCredentialsType。因此,只要我的AuthorizationPolicy检查evaluateContext.Properties [“Identities”],它就会看到它的WindowsIdentity。我想通过自定义存储(DB)来验证用户身份。

有什么办法可以用wsFederationHttpBinding来完成它吗?

回答

1

嗯,这里的答案

STS配置:

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

用户名验证

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