none
Korrektes Verhalten bei "Digest" Authentifizierung RRS feed

  • Frage

  • Hallo,

    ich rufe eine Java REST-Service über die System.Net.WebClient Klasse auf. Der Service erfordert eine Digest Authentifizierung.
    Soweit klappt auch alles, nur wenn ich eine URL abrufe, welche einen QueryString beinhaltet bekomme ich vom Server die Antwort mit Status Code 401, nicht authorisiert.

    Mittels Fiddler habe ich die Request- und Reponse-Header untersucht und bin auf folgendes gestoßen:

    Die URL die ich aufrufe sieht beispielsweise folgendermaßen aus:
    http://server:888/rest/11/00000001/mitglied/7196?pretty
    Der Authorization Header ist folgender:
    Authorization: Digest username="username",realm="Pro Data Ombis Fakt Rest 11",nonce="dLkSsHkRAmlNIWeuVvxGRADV/V4jEtexFKNI4rYAszQ=",uri="/rest/11/00000001/mitglied/7196",algorithm="MD5",cnonce="4e4a0b3c844f1107ee095a111529490f",nc=00000001,qop="auth",response="4d7192aa7fd2df4e6cb7881a626baa6c"
    (username habe ich für dieses Posting verändert, also stimmt im Beispiel der generierte Hash nicht)

    Kann es sein, dass in der uri des Authorization Tokens der QueryString ebenfalls angegeben werden muss? Wenn ich einen Request über den IE mache wird jedenfalls der QueryString dort mit übergeben und der Server liefert mir eine 200er Antwort.

    Nun frage ich mich, wer hier was falsch macht: der Client, da er den QueryString weglässt, oder der Server, der den Request nur authentifiziert, wenn der QueryString mit übergeben wurde. Ich bin leider kein Digest-Experte und weiß nicht, was das W3C in einem solchen Fall vorschreibt.
    Ich will mich erst an den Publisher des REST-Services wenden, wenn ich weiß, dass der Server mit dem Authorization-Header zu restriktiv vorgeht. Falls das Fehlverhalten beim Client liegt würde ich gerne wissen, wie ich vorgehen kann um trotzdem einen korrekten Request abzusetzen.

    Danke
    Tobias

    Freitag, 29. Juli 2011 08:54

Antworten

  • Deine Annahme ist korrekt. Der RFC2617 https://www.ietf.org/rfc/rfc2617.txt, welcher die Digest-Authentifizierung standardisiert beschreibt das Feld "uri" wie folgt:

    digest-uri       = "uri" "=" digest-uri-value
    digest-uri-value = request-uri   ; As specified by HTTP/1.1

    digest-uri The URI from Request-URI of the Request-Line; duplicated here because proxies are allowed to change the Request-Line in transit.

    Das bedeutet: Die komplette URI von oben, inklusive QueryString.

    Grüße,
    Jonny

    ------
    MSDN Hotline http://msdn-online.de/hotline | Feedback http://www.msdn-online.de/dialog/ | Messenger MSDN-Messenger-Hotline@hotmail.de
    • Als Antwort vorgeschlagen Jonny Best Mittwoch, 21. September 2011 13:34
    • Als Antwort markiert Tobias Burger Mittwoch, 21. September 2011 14:20
    Mittwoch, 21. September 2011 13:34
  • Danke Jonny für die Bestätigung!

    Ich habe inzwischen auch eine Lösung unter https://connect.microsoft.com/VisualStudio/feedback/details/571052/digest-authentication-does-not-send-the-full-uri-path-in-the-uri-parameter gefunden, welche eine Wrapper-Klasse um HttpWebRequest empfielt.

    MfG
    Tobias

    • Als Antwort markiert Tobias Burger Mittwoch, 21. September 2011 14:20
    Mittwoch, 21. September 2011 14:20

Alle Antworten

  • Deine Annahme ist korrekt. Der RFC2617 https://www.ietf.org/rfc/rfc2617.txt, welcher die Digest-Authentifizierung standardisiert beschreibt das Feld "uri" wie folgt:

    digest-uri       = "uri" "=" digest-uri-value
    digest-uri-value = request-uri   ; As specified by HTTP/1.1

    digest-uri The URI from Request-URI of the Request-Line; duplicated here because proxies are allowed to change the Request-Line in transit.

    Das bedeutet: Die komplette URI von oben, inklusive QueryString.

    Grüße,
    Jonny

    ------
    MSDN Hotline http://msdn-online.de/hotline | Feedback http://www.msdn-online.de/dialog/ | Messenger MSDN-Messenger-Hotline@hotmail.de
    • Als Antwort vorgeschlagen Jonny Best Mittwoch, 21. September 2011 13:34
    • Als Antwort markiert Tobias Burger Mittwoch, 21. September 2011 14:20
    Mittwoch, 21. September 2011 13:34
  • Danke Jonny für die Bestätigung!

    Ich habe inzwischen auch eine Lösung unter https://connect.microsoft.com/VisualStudio/feedback/details/571052/digest-authentication-does-not-send-the-full-uri-path-in-the-uri-parameter gefunden, welche eine Wrapper-Klasse um HttpWebRequest empfielt.

    MfG
    Tobias

    • Als Antwort markiert Tobias Burger Mittwoch, 21. September 2011 14:20
    Mittwoch, 21. September 2011 14:20