Wie kommt man ohne User-Passwort Alfresco Login-Ticket, aber Benutzer mit Benutzerprinzipalnamen (UPN) mit Identitätswechsel

StackOverflow https://stackoverflow.com/questions/4627797

Frage

Ich schreibe eine DLL, die Funktion für das Erhalten Alfresco Login Ticket hat, ohne Benutzer-Passwort zu verwenden, nur mit einem Benutzerprinzipalnamen (UPN). Ich rufe Alfresco REST API-Service / wcservice . Ich benutze NTLM in Alfresco.

Ich Identitätswechsel Benutzer WindowsIdentity Konstruktor wie hier erklärt http: / /msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingbyusingwindowsidentity . Ich überprüfte und Benutzer richtig imitiert (I WindowsIdentity.GetCurrent().Name Eigenschaft überprüft).

Nachdem ein Benutzer Identitätswechsel, ich versuche HttpWebRequest zu machen und seine Berechtigungsnachweise mit CredentialsCache.DefaultNetworkCredentials gesetzt. Ich erhalte die Fehlermeldung:

The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.GetResponse()

Wenn ich new NetworkCredential("username", "P@ssw0rd") auf Set Anfrage Anmeldeinformationen verwenden, ich Alfresco Login Ticket (HttpStatusCode.OK, 200).

Gibt es eine Möglichkeit, dass ich Alfresco Login Ticket ohne User-Passwort bekommen?

Hier ist der Code, dass ich mit:

private string GetTicket(string UPN) {
 WindowsIdentity identity = new WindowsIdentity(UPN);
 WindowsImpersonationContext context = null;

 try {
  context = identity.Impersonate();

  MakeWebRequest();
 }
 catch (Exception e) {
  return e.Message + Environment.NewLine + e.StackTrace;
 }
 finally {
  if (context != null) {
   context.Undo();
  }
 }
}

private string MakeWebRequest() {
 string URI = "http://alfrescoserver/alfresco/wcservice/mg/util/login";


 HttpWebRequest request = WebRequest.Create(URI) as HttpWebRequest;

 request.CookieContainer = new CookieContainer(1);

 //request.Credentials = new NetworkCredential("username", "p@ssw0rd"); // It works with this
 request.Credentials = CredentialCache.DefaultNetworkCredentials;  // It doesn’t work with this
 //request.Credentials = CredentialCache.DefaultCredentials;    // It doesn’t work with this either

 try {
  using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) {
   StreamReader sr = new StreamReader(response.GetResponseStream());

   return sr.ReadToEnd();
  }
 }
 catch (Exception e) {
  return (e.Message + Environment.NewLine + e.StackTrace);
 }
}

Hier sind Aufzeichnungen von Alfresco stdout.log (wenn es in irgendeiner Weise hilft):

17:18:04,550  DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5
17:18:04,550  DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.526239ms
17:18:04,550  DEBUG [app.servlet.NTLMAuthenticationFilter] New NTLM auth request from 10.**.**.** (10.**.**.**:1229)
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Processing request: /alfresco/wcservice/mg/util/login SID:7453F7BD4FD2E6A61AD40A31A37733A5
17:18:04,566  DEBUG [web.scripts.DeclarativeRegistry] Web Script index lookup for uri /mg/util/login took 0.400909ms
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Received type1 [Type1:0xe20882b7,Domain:<NotSet>,Wks:<NotSet>]
17:18:04,566  DEBUG [app.servlet.NTLMAuthenticationFilter] Client domain null
17:18:04,675  DEBUG [app.servlet.NTLMAuthenticationFilter] Sending NTLM type2 to client - [Type2:0x80000283,Target:AlfrescoServerA,Ch:197e2631cc3f9e0a]
War es hilfreich?

Lösung

Ich habe das Problem gelöst!

Ich glaube, dass wir eine Fehlerbehebung Kerberos Delegation . Es enthält:

  • Checkliste für Active Directory,
  • Checkliste für die Client-Anwendung,
  • Checkliste für die mittlere Ebene,
  • Checkliste für die Back-End

und

  • Konfigurationsbeispiele für gemeinsame Szenarien.

Einstellung TrustedToAuthForDelegation Benutzerkontensteuerung (UAC) in Powershell von Active Directory-Cmdlets getan wird erklärt hier .

Sie können mehr über Windows-Authentifizierung in ASP.NET 2.0 lesen .

Natürlich Alfresco muss Kerberos-Login aktiviert ist.

Andere Tipps

Ich denke, dass es nicht möglich, für Alfresco ist. Nur wenn Sie spezielle Authentifizierungs-Subsystem verwenden, in denen diese ‚unpersönlich‘ Benutzer vorhanden ist.

Versuchen Sie dies, weil ‚Gast‘ Benutzer Quer für alle Subsystem-Authentifizierung ist.

request.Credentials = new NetworkCredential ( "Gast", "Gast");

Und die URI, so etwas wie folgt aus:

string URI = „http:. // alfrescoserver / im Freien / s / api / login oder was auch immer Sie vorschlagen

Viel Glück. Paco

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top