"if_http_client authenticate" Logindaten bei der INITIALIZATION hinterlegen?

Getting started ... Alles für einen gelungenen Start.
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

"if_http_client authenticate" Logindaten bei der INITIALIZATION hinterlegen?

Beitrag von danbrown_1999 (ForumUser / 10 / 5 / 0 ) »
Hi,

folgendes Beispiel:

Beim Aufrufen der Classe CL_HTTP_CLIENT wird die Methode if_http_client~authenticate aufgerufen.

Dort findet sich folgender code (siehe unten).

In meinem Programm rufe ich die CL_HTTP_CLIENT auf und dann werde ich erstmal aufgefordert, den Username und Passwort einzugeben.

Jetzt würde ich die Userdaten gerne ein mal zum Initalisieren eingeben. Sodass ich das Programm dann, solange die Session geöffnet ist, ausführen kann, ohne nochmal den Usernamen und das Passwort einzugeben.

Ich habe mir überlegt, bei der Initalisierung, username und password nach der ersten Eingabe in eine Variable zu schreiben und anschließend immer wieder zu übergeben (im Hintergrund).

Beim Schließen der Anwendung, sollen die Variablen geleert werden.

Findet ihr dieses Vorgehen sinnvoll? Was ist denn "best practice"?

Ich möchte aus Sicherheitsgründen verhindern, dass Username und Passwort dauerhaft im SAP hinterlegt werden.

Würdet Ihr hier eine eigene Klasse & Methode schreiben, und diese aufrufen?
Gibt es einen besseren Mittelweg (vorhandene SAP-Funktionen?), die sicher ist?

Code: Alles auswählen.


method if_http_client~authenticate.
* ...
  pf_m_open c_statistic_state 'HTTP Basic Authentication'. "#EC *

  if proxy_authentication <> 'X'.
    m_username = username.
    m_password = password.
    m_client   = client.
    m_language = language.
    m_is_password_encrypted = ABAP_FALSE.
  endif.
  m_patch = 0.

  if proxy_authentication <> 'X'.
    call method request->set_authorization
      EXPORTING
        username = m_username
        password = m_password.
  else.
    if m_target_scheme = schemetype_http.
      m_is_proxy_password_encrypted = ABAP_FALSE.
* -- proxy logon only for http protocol
      data: l_utility type ref to if_http_utility.
      data: logon     type string,
            logon_b64 type string.

      create object l_utility type cl_http_utility.

      concatenate username ':' password into logon.
      logon_b64 = l_utility->encode_base64( logon ).
      concatenate 'Basic' logon_b64 into logon_b64 "#EC NOTEXT
         separated by space.
      call method request->set_header_field
        EXPORTING
          name  = 'Proxy-Authorization' "#EC NOTEXT
          value = logon_b64.
     else.
       if c_client_kernel_version < 5.
         m_is_proxy_password_encrypted = ABAP_TRUE.
         data: l_password_encrypted(128) type c,
               l_password_original(64)   type c.

*   -- proxy logon via SSL layer
         m_proxy_username    = username.
         l_password_original = password.
*   -- encryption of proxy password in case of SSL communication
*   -- for usage in kernel in FM 'HTTP_WRITE_SC'
        call 'RFCControl'                      "#EC CI_CCALL
              id 'CODE'        field 'v'
              id 'SOURCE'      field l_password_original
              id 'DESTINATION' field l_password_encrypted.
         m_proxy_password = l_password_encrypted.
       else.
         m_proxy_username = username.
         m_proxy_password = password.
         m_is_proxy_password_encrypted = abap_false.
       endif.
     endif.
  endif.

  " call method authentication.
  if not m_client is initial.
    data: l_client type string.
    l_client = m_client.
    call method request->set_header_field
      EXPORTING
        name  = 'SAP-Client'                                "#EC NOTEXT
        value = l_client.
  endif.

  if not m_language is initial.
    data: l_language type string.
    l_language = m_language.
    call method request->set_header_field
      EXPORTING
        name  = 'SAP-Language'                              "#EC NOTEXT
        value = l_language.
  endif.
  pf_m_close c_statistic_state 'HTTP Basic Authentication'. "#EC *
endmethod.                    "


gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: "if_http_client authenticate" Logindaten bei der INITIALIZATION hinterlegen?

Beitrag von danbrown_1999 (ForumUser / 10 / 5 / 0 ) »
Hab eine funktionierende Lösung:

Code: Alles auswählen.

    IF o_client IS BOUND.
* Anmeldedaten übermitteln
      o_client->authenticate( username = ''
                              password = '' ).
Einfach die Daten so mitgeben.

Werde jetzt aber noch darüber nachdenken, diese in Variablen zu verstecken.

Mich würde interessieren, wie ihr es so macht.
Wahrscheinlich fest hinterlegt in der Destination/sm59, oder?

Re: "if_http_client authenticate" Logindaten bei der INITIALIZATION hinterlegen?

Beitrag von danbrown_1999 (ForumUser / 10 / 5 / 0 ) »
Sonst jemand eine Idee hier, oder Vorschläge?

Wie kann man Benutzerdaten im Programm "dynamisch" hinterlegen?

Re: "if_http_client authenticate" Logindaten bei der INITIALIZATION hinterlegen?

Beitrag von a-dead-trousers (Top Expert / 4399 / 223 / 1182 ) »
Kurzer Exkurs zum Thema wie man Passwörter "sicher" ablegen kann:
Passwörter für RFC-Destinationen, Webservice-Konfigurationen und Co. werden in SAP im sogenannten SecStore abgelegt. Das ist eine mit einem "fixen" Zertifikat verschlüsselte Tabelle wobei das Zertifikat nur SAP bekannt ist. Im Falle eines Bekanntwerdens des Zertifikats lässt es sich mit einem eigenen Report austauschen. Aus diesem Grund dürfen keine Kundenimplementierungen den SecStore benutzen (obwohl mir mehrere Möglichkeiten bekannt sind wie man das umgehen kann).

Es gibt für die Ablage von Passwörtern in SAP aber auch andere Möglichkeiten. Zum einen mit einem Scrambler (z.B. HTTP_SCRAMBLE) oder mit einer symetirischen Verschlüsselung (z.B. CL_SEC_SXML_WRITER). Diese bieten aber gerade Mal Schutz gegen einen mäßig begabten Anwender. Einem gewieften Hacker können solche Schutzmaßnahmen nicht abschrecken.

Als Ausweg aus nicht zugänglicher Technologie und unzureichendem Schutz bietet die SAP aber auch die Möglichkeit an, sich mittels SSF_KRN_ENVELOPE und SSF_KRN_DEVELOPE seinen eigenen SecStore zu bauen. Im Netz gibt es dazu auch entsprechende Anleitungen. Ich hab darauf aufbauend auch schon einen Proof-of-Concept implementiert, der ähnliche Funktionen wie der SAP eigene SecStore bietet. Nur mit dem produktiven Einsatz hadern wir noch.

Zu deinem Problem:
Soweit ich dich verstanden habe, willst du ja das Passwort nicht "dauerhaft" ablegen, sondern nur solange damit der Benutzer im Programmablauf nur einmalig Benutzername und Passwort eingeben muss.
Da würde ich mir jetzt nicht allzusehr den Kopf darüber zerbrechen und die Informationen in einem Instanzattribut einer Klasse ablegen. Selbst wenn du drauf vergisst die Daten nach Abschluss der Verarbeitung zu löschen, wird die Instanz und damit auch die Information automatisch zerstört, wenn das Programm bzw. die Transaktion beendet wird. Solche Informationen im Programmspeicher zu verschlüsseln oder irgendwie anders "unkenntlich" zu machen ist nicht sonderlich sinnvoll, weil man sie ja trotzdem irgendwann im "Klartext" benötigt und spätestens dann könnte ein einigermaßen gewiefter Anwender die Informationen mit dem Debugger auslesen.

Wovon ich aber abraten würde, ist die Daten im MEMORY, in SET/GET-Parametern, in statischen Attributen oder ähnlichem abzulegen. Auf diese Informationen kann man auch außerhalb des laufenden Programms aus zugreifen und das wäre dann uU schon eine Sicherheitslücke.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
rob_abc

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

8
Antw.
6683
Views
Was macht INITIALIZATION ?
von roftos » 08.05.2009 14:34 • Verfasst in ABAP® für Anfänger
8
Antw.
3076
Views
Ereignis Initialization + pai back
von c oco » 10.04.2013 09:44 • Verfasst in ABAP® für Anfänger
5
Antw.
4192
Views
select-options , INITIALIZATION und AT SELECTION-SCREEN ON..
von Geri » 28.01.2005 09:43 • Verfasst in Dialogprogrammierung
1
Antw.
2658
Views
Verbringungsnachweis im SAP hinterlegen
von Alexander D. » 10.01.2013 14:29 • Verfasst in Sales and Distribution
2
Antw.
6154
Views
Eingabehilfe bei Parameter hinterlegen
von mamba » 15.11.2005 10:46 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Rechnung: Belegspez. Adresse
vor einer Stunde von Manfred K. 1 / 35
Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 4 / 1904
Regex in where
Gestern von tar 8 / 663
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 548

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Rechnung: Belegspez. Adresse
vor einer Stunde von Manfred K. 1 / 35
Daten an Tabelle binden
vor einer Stunde von Lukas Sanders 4 / 1904
Regex in where
Gestern von tar 8 / 663
Programm anlegen mit Vorlage
vor 3 Tagen von DeathAndPain 2 / 548

Unbeantwortete Forenbeiträge

Rechnung: Belegspez. Adresse
vor einer Stunde von Manfred K. 1 / 35
BUSOBJEKT zu CMIS PHIO ermitteln
vor 3 Tagen von snooga87 1 / 459
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3640