Zu erhalten zu versuchen windows-Benutzernamen der client mit WCF
Ich versuche, das Windows-Benutzer-name des client, der den Zugriff auf die ASP.NET Seite, die gehostet wird auf meinem Lokalen IIS. Ich bin callign einen WCF-service innerhalb der ASP.NET Seite der gibt den windows-Benutzernamen des Clients. Ich stieß auf so viele posts zu, und die meisten von Ihnen sind darauf hindeutet, dass
- OperationContext.Aktuelle.ServiceSecurityContext.WindowsIdentity.Name
- HttpContext.Aktuelle.Benutzer.Identität.Name
- HttpContext.Aktuelle.Benutzer.Identität.Name
funktionieren sollte. Die Probleme, die ich bin mit "1" ist immer Null zurückgeben. "2" und "3" sind die immer wiederkehrenden meinem lokalen Benutzernamen und nicht den anfragenden user-Namen. Bin ich etwas fehlt in der web.configs der beiden ASP.NET und WCF-Dienst.
IIS-Eigenschaften: Integrierte Windows-Authentifizierung Aktiviert ist.
Hier ist der code.
WCF
public string GetWindowsUser()
{
string temp = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name;
string temp1 = HttpContext.Current.User.Identity.Name;
string temp2 = HttpContext.Current.User.Identity.Name;
return "Temp: "+temp+" \nTemp1: "+temp1+" \nTemp2: "+temp2;
}
WEB.Config
<system.web>
<compilation debug="false" targetFramework="4.0"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:4772/Services.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" contract="WindowsAuthServices.IService1" name="BasicHttpBinding_IService1"/>
</client>
</system.serviceModel>
ASP.NET Seite:
protected void Page_Load(object sender, EventArgs e)
{
WindowsAuthServices.Service1Client client = new WindowsAuthServices.Service1Client();
lblWelcome.Text = client.GetWindowsUser();
}
Web.Config
<system.web>
<compilation debug="true" targetFramework="4.0"/>
</system.web>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IService1" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
<message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:4772/Services.svc" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IService1" contract="WindowsAuthServices.IService1" name="BasicHttpBinding_IService1"/>
</client>
</system.serviceModel>
- Stoppen Sie und sagen Sie, was Sie tun werden?
- Unser Unternehmen will seine Website zu öffnen, nur diejenigen, die sich mit Unternehmens-Geräte(laptops). So wollen Sie die sharepoint-Website, um die Windows-Authentifizierung verwenden und nicht Aufforderung den Benutzernamen und das Passwort. Wenn der windows-Benutzername entspricht, mit der man in die Liste der zugelassenen Benutzer es öffnen sollte oder sonst Umleitung auf andere Seite Authentifizierung. erste 1. Teil getan hat, ein problem gewesen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, da Ihr Aufruf erfolgt im Namen der Identität, unter denen die ASP.Net worker-Prozess ausgeführt wird und nicht unter der Identität des Benutzers, der die Seite (die aufgerufen wird, Identitätswechsel).
Vom http://geekswithblogs.net/robz/archive/2007/10/03/wcf-impersonation---specifying-windows-authentication-credentials-on-the-service.aspx
1) Die ASP.NET client-web -.config-Datei benötigt, um die impersonation-set mit dem folgenden markup (ich habe es unter dem element authentication wie gezeigt):
2) Das service-Verhalten mussten so konfiguriert werden, um Windows für die Rechte und die Identität der Anrufer eingehen.
So brauchen Sie nur Ihren Laptop angeschlossen werden, um windows-Domäne und verwenden Sie die Integrierte Sicherheit und richtigen Sicherheitsgruppen in Sharepoint.
Was Sie beschreiben, ist nicht die Sicherheit und es wird nie funktionieren.
Klingt wie Sie brauchen, um zu implementieren/konfigurieren Sie Ihre website für Identität delegation. Wenn Sie brauchen, um die Konfiguration von WCF für die delegation, check-out in diesem MSDN-Artikel.
Habe ich endlich die Lösung gefunden. Wenn der andere Benutzer versuchen, Zugriff auf meinem lokalen IIS über die IP, meinem lokalen IIS geht davon aus, dass es eine internet-Anfrage und nicht im intranet Anforderung und seit der windows-Authentifizierung funktioniert nur mit intranet-Anforderungen. Um dies zu lösen musste ich meine host-website auf einem unserer domain-Server. Seit dem domain-server war bereits so eingerichtet, dass nur Benutzer in dieser Domäne Zugriff haben, jetzt hat es die windows-login-info. Und da endet mein Elend.