Schlüsselbasierte MID-Webserverauthentifizierung konfigurieren

  • Freigeben Version: Washingtondc
  • Aktualisiert 1. Februar 2024
  • 2 Minuten Lesedauer
  • Bieten Sie Ihrer MID-Webservererweiterung zusätzliche Sicherheit, indem Sie schlüsselbasierte Authentifizierung verwenden. Generieren Sie ein Authentifizierungstoken, das im Autorisierungsheader eingehender Client-Anforderungen gesendet werden soll.

    Vorbereitungen

    Hinweis:
    Dieses Verfahren dient nur der Kompatibilität mit Releases vor Washington DC. Weitere Informationen zum Verfahren im Release Washington DC für die Konfiguration des MID-Webservers finden Sie unter MID-Webservererweiterung konfigurieren.
    • Stellen Sie einen MID-Server bereit, und starten Sie ihn.
    • Konfigurieren Sie eine MID-Webserver-Erweiterung und wählen Sie „Schlüsselbasiert“ als Authentifizierungstyp aus. Weitere Informationen finden Sie unter MID Web Server-Erweiterung konfigurieren.

    Erforderliche Rolle: agent_admin

    Prozedur

    1. Erstellen Sie mit einem Skriptprogramm ein Token, indem Sie mithilfe definierter Elemente der HTTP/HTTPS-Anforderung (HTTP-Verb, Inhaltstypheader und Anforderungspfad, die vom Client empfangen werden, der auf die Endpunkte der MID-Webservererweiterung zugreift) eine Zeichenfolge erstellen.
    2. Erstellen Sie einen HMAC (Hash Message Authentication Code) der Zeichenfolge, indem Sie die generierte Zeichenfolge mit dem automatisch generierten geheimen Schlüssel signieren, der unter Geheimer Key angezeigt wird.
      Dieser Schlüssel ist pro Kontext eindeutig.
    3. Geben Sie Informationen an, um dieses Authentifizierungstoken im Autorisierungsheader der Anforderung zu übermitteln.
      Element Wert
      Pfad zu einer Webservice-API zum Senden von Rohdaten URL-Format:

      https://<MID Server-IP-Adresse>:<Portnummer>/api/mid/sa/metrics

      Verwenden Sie eine Portnummer, die einer der in der Webservererweiterung eingerichteten Portnummern entspricht.

      Beispiel: http://10.10.10.10:8097/api/mid/sa/metrics

      Anforderungstyp POST
      Datumsformat
      yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
      Beispiel: 2016-06-08T20:54:58.917Z
      Content-Type Anwendung/JSON

      Verwenden Sie die folgenden Anforderungselemente, um die erforderliche Zeichenfolge zu generieren: HTTP-Verb, Inhaltstyp, Datum und Anforderungspfad. Geben Sie diese Elemente an, und platzieren Sie sie in dieser Reihenfolge:

      • HTTP-Verb + „\n“ +
      • Inhaltstyp + „\n“ +
      • Datum + „\n“ +
      • Anforderungspfad

      In diesem Beispiel lautet die Anforderungszeichenfolge:

      POST\napplication/json\n2016-06-08T20:54:58.917Z\n/api/mid/sa/metrics

      Für die Zeitstempelanforderung ist zur Authentifizierung der Anforderung ist ein gültiger Zeitstempel erforderlich, der den HTTP-Datumsheader verwendet. Stellen Sie sicher, dass der Zeitstempel nicht mehr als 15 Minuten von der Zeit des MID Servers abweicht.

    So generieren Sie den HMAC der Zeichenfolge, die definierte Elemente der HTTP/HTTPS-Anforderung verwendet, mit Java

    package sample;
    import com.glide.util;
    import java.security.SignatureException;
    
    import javax.crypto.Mac;
    import javax.crypto.spec.SecretKeySpec;
    
    public class AuthUtil {
    	
    private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1";
    
    /***
     * Generates base64-encode the HMAC(Hash Message Authentication Code) of input data
     * 
     * @param data
     * @param key
     * @return
     * @throws java.security.SignatureException
     */
    public static String signData(String data, String key) throws java.security.SignatureException {
    	String result;
    	try {
    		// get an hmac_sha1 key from the raw key bytes
    		SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
    
    		// create hmac_sha1 Mac instance and initialize with the signing key
    		Mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
    		mac.init(signingKey);
    
    		// compute the hmac on input data bytes
    		byte[] rawHmac = mac.doFinal(data.getBytes("UTF-8"));
    
    		// base64-encode the hmac
    		result = Base64.encode(rawHmac);
    
    	} catch (Exception e) {
    		throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
    	}
    	return result;
    }
    }