Přístup Javascriptu k fragmentu URL v hlavičce Location pro OAuth 2
Implicitní grant OAuth 2.0 (http://tools.ietf.org/html/draft-ietf-oauth-v2-31#section-4.2) zahrnuje zajímavou choreografii mezi klientskou aplikací, prohlížečem a autorizačním serverem. Autorizační server vrací prohlížeči stavový kód HTTP 302 s hlavičkou Location takto:
Umístění: http://clientapp.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=xyz&token_type=example&expires_in=3600
Prohlížeč odstraní fragment před provedením přesměrování a služba na adrese clientapp.com/cb by měla odpovědět [dle specifikace] „webovou stránkou (obvykle HTML dokumentem s vloženým skriptem) schopnou přistupovat k celé URI přesměrování včetně fragmentu uchovaného uživatelským agentem a extrahovat přístupový token (a další parametry) obsažené v fragmentu“.
Implementoval jsem část tohoto řešení, která se týká autorizačního serveru, ale mám velmi malou zkušenost s JavaScriptem. Jak dostat JavaScript k fragmentu, který prohlížeč odstranil před přesměrováním?
Díky,
Michael
Odpověď č. 1
Zkuste něco takového (pochází z tohoto německé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>
Pak můžete odkazovat na svůj přístupový token pomocí fragment['access_token'].
