Prístup JavaScriptu k fragmentu URL hlavičky Location pre OAuth 2


Implicitný grant OAuth 2.0 (http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.2) zahŕňa zaujímavú spoluprácu medzi klientskou aplikáciou, prehliadačom a autorizačným serverom. Autorizačný server vráti prehliadaču stavový kód HTTP 302 s hlavičkou Location nasledovne:

Miesto: http://clientapp.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600

Prehliadač odstráni fragment pred vykonaním presmerovania a služba na adrese clientapp.com/cb by mala odpovedať podľa špecifikácie „webovou stránkou (zvyčajne HTML dokumentom s vloženým skriptom) schopnou pristupovať k úplnému URI presmerovania vrátane fragmentu uchovaného používateľským agentom a extrahovať prístupový token (a ďalšie parametre) obsiahnuté vo fragmente“.

Implementoval som časť autorizovaného servera tohto, ale mám veľmi malú skúsenosť s JavaScriptom. Ako prinútite JavaScript, aby získal fragment, ktorý prehliadač odstránil pred presmerovaním?

Ďakujem,
Michael

Odpoveď č. 1

Skúste niečo takéto (prevzaté z tohto nemeckého článku):

<script>
   var fragmentString = location.hash.substr(1);
   var fragment = {};
   var fragmentItemStrings = fragmentString.split('&');
   for (var i in fragmentItemStrings) {
     var fragmentItem = fragmentItemStrings[i].split('=');
     if (fragmentItem.length !== 2) {
       continue;
     }
     fragment[fragmentItem[0]] = fragmentItem[1];
   }
</script>

Potom môžete odkazovať na svoj prístupový token pomocou fragment['access_token'].