WCF Authentifizierung Benutzername: Kann ich den Benutzernamen in eine benutzerdefinierte ServiceAuthorizationManager?

Habe ich einen WCF-Dienst verwendet eine benutzerdefinierte ServiceAuthorizationManager. Die custom-auth-manager, bereits eingerichtet ist, in der Handhabung von Windows Forms-Authentifizierung.

Jedoch, wenn ich eine Verbindung mit einem client, der UserName auth, ich kann nicht scheinen zu finden, die Benutzernamen überall.

Den client-code sieht wie folgt aus:

this.ClientCredentials.UserName.UserName = "user";
this.ClientCredentials.UserName.Password = "pass";
this.Open();
this.MyMethod(); //my actual contract method
this.Close();

Dann auf dem server, ich habe mein custom-auth-manager:

public sealed class AppAuthorizationManager : ServiceAuthorizationManager
{
    public override bool CheckAccess(OperationContext operationContext, ref Message message)
    {
        //would like to check user/pwd here...
    }
}

Ist das möglich?

  • Die Thread.CurrentPrincipal ist nicht festgelegt,
  • operationContext.ServiceSecurityContext.PrimaryIdentity ist nicht festgelegt.
  • operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets leer ist.

Ist der user/pwd sollen immer und überall verfügbar? Oder muss ich hinzufügen, um eine benutzerdefinierte UsernamePasswordValidator auch?


Update:, So dass ich Hinzugefügt eine benutzerdefinierte UserNamePasswordValidator und ein IAuthorizationPolicy.
Meine aktuelle WCF config sieht wie folgt aus:

<behavior name="Server2ServerBehavior">
  <serviceMetadata httpGetEnabled="true" />
  <serviceDebug includeExceptionDetailInFaults="true" />
  <serviceAuthorization principalPermissionMode="Custom" serviceAuthorizationManagerType="MyApp.AuthManager, MyApp">
    <authorizationPolicies>
      <add policyType="MyApp.TokenAuthorizationPolicy, MyApp" />
    </authorizationPolicies>
  </serviceAuthorization>
  <serviceCredentials>
    <userNameAuthentication customUserNamePasswordValidatorType="MyApp.PFUserNameValidator, MyApp" />
  </serviceCredentials>
</behavior>

Wenn ich einen Haltepunkt in allen 3 solche Klassen, WCF wirft die Ausnahme:

LogonUser failed for the 'username' user. Ensure that the user has a valid Windows account.
   at System.IdentityModel.Selectors.WindowsUserNameSecurityTokenAuthenticator.ValidateUserNamePasswordCore(String userName, String password)

Bevor Sie ausgeführt werden. Hmmm...

InformationsquelleAutor CodingWithSpike | 2009-02-09

Schreibe einen Kommentar