Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]SAML w PHP
Forum PHP.pl > Forum > Przedszkole
slawek3422
Cześć.
Robię integrację urzędowej strony z Profilem Zaufanym. Ogarnąłem już wysyłanie koperty AuthnRequest, ładnie wyskakuje panel logowania do profilu zaufanego, po poprawnej autoryzacji PZ wysyła POST'em parametr SAMLart.

Problem polega na tym, że nie do końca wiem jak go przejąć. Firefox pokazuje ten parametr w konsoli. Za każdym razem jest inny. Przejęcie tego parametru jest wymagane do dokończenia dalszej komunikacji z PZ.

Próbowałem już z gotowymi bibliotekami jak php-saml ale dokumentacja nie pokazuje przykładów użycia i jestem w kropce.

https://github.com/onelogin/php-saml/blob/m...mo2/consume.php

Tam jest obsługa $_POST['SAMLResponse']... zmieniłem odpowiednio na SAMLart ale skrypt pokazuje że nie ma nic w tablicy POST ...

Może ktoś to już robił i może podpowiedzieć w jaki sposób przejąć w PHP odpowiedź SAML?
Pyton_000
Czytałeś? http://www.extern.pl/artykuly/sso_epuap/
slawek3422
Tak czytałem. Tam jest opisana integracja ze stary ePUAP'em. Wtedy było prościej bo SAMLart leciał GET'em smile.gif

Tak kto wygląda:
Pyton_000
Ale jakie to ma znaczenie, skoro musisz wziąć ten parametr,wepchać go do koperty i puścić przeze soap ?
Ew pokaż z której dokumentacji korzystasz.
slawek3422
ePUAP 1 był prostszy w integracji i mniej zabezpieczony. Wszystkie manuale, które są w sieci odnoszą się właśnie do starego ePUAPU. COI zamieściło na stronie ePUAP instrukcję dla integratorów ale zawierają one jedynie przykłady kopert SOAP ale tak tylko po łebkach, bo nie doszukałem się istotnych informacji np. które węzły podpisywać.

Jakby to było takie proste że wrzucam sobie $_POST['SAMLart'] do koperty SOAP to już dawno mam temat pozamiatany. Z tego co się doczytałem przez weekend i dziś od rana też to trzeba zrobić HTTP-POST binding.

Takie wywołanie na pewno nie działa:

  1. $SAMLart = @$_POST['SAMLart'];
  2. if (!empty($SAMLart)) {
  3. echo 'SAMLart: ', $SAMLart;
  4. die();
  5. } else {
  6. echo "Brak SAMLart";
  7. }
Pyton_000
a co jest w

Kod
var_dump(file_get_contents('php://input'));


Edited:

https://epuap.gov.pl/wps/wcm/connect/fecfa2...pdf?MOD=AJPERES

Na stronie 20 jest przykładowa koperta do wysłania ArtifactResolve
slawek3422
  1. string(0) ""


Mam tą instrukcję. Tak jak pisałem - to jest tylko przykład koperty, brak jest informacji jak wyciągnąć dane, które należy włożyć do odpowiednich węzłów, a jak widzisz, SAMLart należy włożyć do <saml2p:Artifact></saml2p:Artifact>

Widzę SAMLart w Firefoxie ale nie wiem jak go przejąć smile.gif
Pyton_000
Pokaż jeszcze output z $_SERVER
Generalnie SAMLArt powinno być normalnie w POST może gdzieś jakiś redirect robi ci się i traci post
slawek3422
  1. (
  2. [HTTPS] => on
  3. [SSL_SERVER_S_DN_OU] => Domain Control Validated
  4. [SSL_SERVER_S_DN_OU_1] => PositiveSSL
  5. [SSL_SERVER_S_DN_CN] => ...
  6. [SSL_SERVER_I_DN_C] => GB
  7. [SSL_SERVER_I_DN_ST] => Greater Manchester
  8. [SSL_SERVER_I_DN_L] => Salford
  9. [SSL_SERVER_I_DN_O] => Sectigo Limited
  10. [SSL_SERVER_I_DN_CN] => Sectigo RSA Domain Validation Secure Server CA
  11. [SSL_SERVER_SAN_DNS_0] =>...
  12. [SSL_SERVER_SAN_DNS_1] => ...
  13. [SSL_VERSION_INTERFACE] => mod_ssl/2.4.43
  14. [SSL_VERSION_LIBRARY] => OpenSSL/1.1.1c
  15. [SSL_PROTOCOL] => TLSv1.3
  16. [SSL_SECURE_RENEG] => false
  17. [SSL_COMPRESS_METHOD] => NULL
  18. [SSL_CIPHER] => TLS_AES_128_GCM_SHA256
  19. [SSL_CIPHER_EXPORT] => false
  20. [SSL_CIPHER_USEKEYSIZE] => 128
  21. [SSL_CIPHER_ALGKEYSIZE] => 128
  22. [SSL_CLIENT_VERIFY] => NONE
  23. [SSL_SERVER_M_VERSION] => 3
  24. [SSL_SERVER_M_SERIAL] => F7DF740FA9D88BB3272B2E034AF1A385
  25. [SSL_SERVER_V_START] => Jul 16 00:00:00 2019 GMT
  26. [SSL_SERVER_V_END] => Jul 15 23:59:59 2020 GMT
  27. [SSL_SERVER_S_DN] => CN=...,OU=PositiveSSL,OU=Domain Control Validated
  28. [SSL_SERVER_I_DN] => CN=Sectigo RSA Domain Validation Secure Server CA,O=Sectigo Limited,L=Salford,ST=Greater Manchester,C=GB
  29. [SSL_SERVER_A_KEY] => rsaEncryption
  30. [SSL_SERVER_A_SIG] => sha256WithRSAEncryption
  31. [SSL_SESSION_ID] => 8c32e90de377c1a39cc3050642c1d30886dafc55bdb1baa83b36947f3449c292
  32. [SSL_SESSION_RESUMED] => Resumed
  33. [HTTP_HOST] => ...
  34. [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0
  35. [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  36.   [HTTP_ACCEPT_LANGUAGE] => pl,en-US;q=0.7,en;q=0.3
  37.   [HTTP_ACCEPT_ENCODING] => gzip, deflate, br
  38.   [HTTP_REFERER] => <a href="https://pz.gov.pl/dt/SingleSignOnService" target="_blank">https://pz.gov.pl/dt/SingleSignOnService</a>
  39.   [HTTP_CONNECTION] => keep-alive
  40.   [HTTP_COOKIE] => PHPSESSID=05cm9pdv21amnvj85cfn0tghpo
  41.   [HTTP_UPGRADE_INSECURE_REQUESTS] => 1
  42.   [PATH] => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
  43.   [LD_LIBRARY_PATH] => /usr/local/apache/lib
  44.   [SERVER_SIGNATURE] =>
  45.   [SERVER_SOFTWARE] => Apache/2.4.43 (Unix) OpenSSL/1.1.1c PHP/7.4.5
  46.   [SERVER_NAME] => ...
  47.   [SERVER_ADDR] => ...
  48.   [SERVER_PORT] => 443
  49.   [REMOTE_ADDR] => ...
  50.   [DOCUMENT_ROOT] => /usr/local/apache/htdocs
  51.   [REQUEST_SCHEME] => https
  52.   [CONTEXT_PREFIX] =>
  53.   [CONTEXT_DOCUMENT_ROOT] => /usr/local/apache/htdocs
  54.   [SERVER_ADMIN] => ...
  55.   [SCRIPT_FILENAME] => /usr/local/apache/htdocs/callback/index.php
  56.   [REMOTE_PORT] => 51231
  57.   [GATEWAY_INTERFACE] => CGI/1.1
  58.   [SERVER_PROTOCOL] => HTTP/1.1
  59.   [REQUEST_METHOD] => GET
  60.   [QUERY_STRING] =>
  61.   [REQUEST_URI] => /callback/
  62.   [SCRIPT_NAME] => /callback/index.php
  63.   [PHP_SELF] => /callback/index.php
  64.   [REQUEST_TIME_FLOAT] => 1589196112.487
  65.   [REQUEST_TIME] => 1589196112
  66. )


Robiłem też tak, że przy wywołaniu skryptu miał mi zrzucać $_POST do pliku, też pomyślałem o przekierowaniu. Plik był pusty ...
Pyton_000
Kod
[REQUEST_METHOD] => GET

Więc to nie jest POST

Widnieje za to nagłówek HTTP_UPGRADE_INSECURE_REQUESTS
Czyli respons prawdopodobnie leci na GET http:// z rządaniem do https

Zrób sobie w pliku:

Kod
file_put_content('output.log', var_export($_POST, true), FILE_APPEND);

i zobacz czy coś masz.
slawek3422
Zawartość pliku:
  1. )


Temat do zamknięcia.
Okazało się że powodem problemów był Apache. Po odwiedzeniu adresu http://www.......pl/callback apache dodawał na końcu slash a pod spodem robił przekierowanie 301.
Wystarczyło to wyłączyć i SAMLart już jest w tablicy POST smile.gif
Dziękuję Pyton_000 za poświęcony czas i energię smile.gif
Pyton_000
Jak to zwykle bywa - pierdoła a krwi napsuje.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.