[.NET / PHP] HTTP Auth. van .NET naar PHP

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 19-09 11:43
Hallo, ik zit met het volgende probleem:

Ik heb een C# applicatie welke verbinding maakt met een PHP Webservice (via add Web Reference een 'SOAP Client Protocol').

Dit werkt prima, nu heb ik de PHP Webservice zo gebouwd dat deze met HTTP authenticatie werkt, via PHP werkt dit prima, ik geef de login/password mee aan de service aanroep en klaar.

Maar ik krijg dit niet voor elkaar in .NET, even de volgende code:

C#:
1
2
3
4
5
6
7
NIEUW.testserviceService service = new PHPWebserviceTest.NIEUW.testserviceService();
service.PreAuthenticate = true;
NetworkCredential cred = new NetworkCredential("cees", "123");
CredentialCache cache = new CredentialCache();
cache.Add(new Uri(service.Url), "Basic", cred);
service.Credentials = cache;
textBox1.Text = service.GetSomeText();


De authenticatie heb ik in de php service even weggelaten, en GetSomeText() geeft de inhoud van (php) $_SERVER terug:

code:
1
2
3
AUTH_TYPE=>
AUTH_PASSWORD=>
AUTH_USER=>


Deze zijn altijd leeg.

Wanneer ik in C# de USER-AGENT op het service object set, komt deze wel goed aan, dus dat werkt.

Heeft iemand hier misschien ervaring mee?

Bvd.

Acties:
  • 0 Henk 'm!

  • creator1988
  • Registratie: Januari 2007
  • Laatst online: 02:55
Hoe gaat het zonder CredentialCache ?

Dus gewoon je service.Credentials zetten naar NetworkCredential ?

edit:
de preauthenticate wacht op een 401, wordt deze wel gezet als je niet authenticate?
Je kan dit even proberen:

service.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(new ASCIIEncoding().GetBytes(apiCredentials.UserName + ":" + apiCredentials.Password)));

[ Voor 57% gewijzigd door creator1988 op 09-06-2009 12:27 ]


Acties:
  • 0 Henk 'm!

  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 19-09 11:43
Ook al geprobeerd, werkt ook niet (vergeten te vermelden). Variabelen blijven leeg.

--

Dat zou ik wel kunnen proberen, er wordt ook een 401 gegooid maar aangezien ik nooit inlog zal ik altijd die 401 krijgen.

service.Header.*, die bestaat bij mij niet?

[ Voor 51% gewijzigd door Keess op 09-06-2009 12:30 ]


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 23:11

Haan

dotnetter

creator1988 schreef op dinsdag 09 juni 2009 @ 12:25:
Hoe gaat het zonder CredentialCache ?

Dus gewoon je service.Credentials zetten naar NetworkCredential ?
Zo zet ik ook altijd credentials inderdaad.

edit:
ok, dat is het dus niet

[ Voor 6% gewijzigd door Haan op 09-06-2009 12:29 ]

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 19-09 11:43
Misschien is dit ook wel even relevant, de manier waarop de client aan zijn WSDL komt:

Vanuit .NET creeer ik dus een service welke verwijst naar ....../services.php?service=Test&wsdl

Deze redirect naar de juist .wsdl file, de gebruikte service klasse word opgehaald door ....../services.php?service=Test, welke dan weer de juiste klasse include.

Dit moet volgens mij niets uitmaken, het doet hetzelfde, alleen op een andere manier.

In services.php log ik steeds het volgende:
PHP:
1
Log(@$_SERVER['AUTH_USER'] . " => " . @$_SERVER['AUTH_PASSWORD'] . " => " . @$_SERVER['LOGON_USER'] . " => " . @$_SERVER['REMOTE_USER']);


Deze zijn altijd leeg, ook PHP_AUTH_USER/PHP_AUTH_PW...

Acties:
  • 0 Henk 'm!

  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Haan schreef op dinsdag 09 juni 2009 @ 12:28:
[...]

Zo zet ik ook altijd credentials inderdaad.

edit:
ok, dat is het dus niet
Al eens bovenstaande opmerkingEN geprobeerd?

C#:
1
service.Credentials = new NetworkCredential("cees", "123");

Skill is when luck becomes a habit.


Acties:
  • 0 Henk 'm!

  • Keess
  • Registratie: Augustus 2006
  • Laatst online: 19-09 11:43
Ik dacht dat het misschien kwam doordat er eerst naar de WSDL wordt verwezen, en daarna vanaf de WSDL naar de PHP klasse (hij loopt dus 2 keer door services.php), dat de header misschien verloren gaat... Maar dan zou user-agent ook standaard moeten zijn, en deze blijft geset.

Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 23:11

Haan

dotnetter

eek schreef op dinsdag 09 juni 2009 @ 23:35:
[...]


Al eens bovenstaande opmerkingEN geprobeerd?

C#:
1
service.Credentials = new NetworkCredential("cees", "123");
Ik ben niet de TS hè ;)

Kater? Eerst water, de rest komt later

Pagina: 1