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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist normalerweise erledigt das in der UsernamePasswordValidator - das ist der einzige Ort, den Sie ' ll haben Zugriff auf das Passwort. Dies ist jedoch nicht, wo Sie die AUFTRAGGEBER - das wäre in der
IAuthorizationPolicy
'sEvaluate
- Methode, die könnte so Aussehen:(wo
TrustedAuthType
ist der name von unserem Passwort-validator)In diesem Ort, der thread AUFTRAGGEBER festgelegt werden, und wir können uns identifizieren (und Rollen-basierte Sicherheit, etc.)
Was könnte das problem sein, wenn die "Identitäten" null ist? Ich habe eine "benutzerdefinierte" principalPermissionMode zu und eine AuthorizationPolicy genau wie du in deinem Beispiel
dann es klingt wie Sie sind anonym... darüber hinaus, schwer zu beantworten.
Ich löste die "Identitäten" - problem, als ein Problem, das lokal auf meinem Computer nicht richtig funktioniert hat. Jedoch, das problem, das ich danach bekam, war, dass ich die Identität meiner Identität, die war wohl nicht auf der Stufe der benutzerdefinierte Autorisierungs-policies. Also ging ich diesem Ansatz, dokumentierte ich in meinem blog-Beitrag (wenn jemand zufällig das gleiche problem): blog.js-development.com/2010/11/...
guter link, vielen Dank für die Zugabe
InformationsquelleAutor Marc Gravell