it-swarm.com.ru

Получить авторизацию из заголовка HTTP-запроса

Я уже искал в SO некоторые темы по этому поводу, но смог найти только те, которые объясняли, для чего этот заголовок или как получить заголовок авторизации в c #, но я не хочу читать его со стороны сервера, а из сторона клиента.

Есть ли способ получить закодированный в Base64 заголовок «Авторизация» из браузера? Я хочу реализовать инструмент, с помощью которого вы можете войти в систему, и если вы нажмете на специальную кнопку, ваше имя пользователя будет сохранено.

Моя проблема в том, что браузер выполняет авторизацию автоматически, а с помощью методов jQuery и JavaScript вы можете только установить заголовки запроса и получить заголовки ответа. Я не мог найти способ получить заголовки запроса.

Библиотека gethttp может получить некоторые заголовки, но не заголовок авторизации .. Я предполагаю, что этот заголовок скрыт.

Я делаю вход в систему через SVN, и браузер выполняет авторизацию в тот момент, когда вы заходите на сайт.

Достаточно только имя пользователя. Я ищу решения, в которых пользователю не нужно вводить свое имя пользователя.

12
manti

Я предполагаю, что вы пытаетесь использовать механизм авторизации Basic Realm На Stackoverflow уже был получен ответ, и в нем содержится объект jquery $.ajax().
Как использовать Basic Auth с jQuery и AJAX?
Поэтому, пожалуйста, не говорите мне об этом

$.ajaxSetup({
  headers: {
    'Authorization': "Basic XXXXX"
  },
  data: '{ "comment" }',
  success: function (){
    alert('Thanks for your comment!'); 
  }
});

где XXXXX - ваше имя пользователя: пароль base64, закодированный

4
John Doeff

Невозможно получить заголовки для запроса страницы CURRENT. Это было задано несколько раз на SO .

Однако вы можете сделать новый запрос и получить заголовки этого запроса. Таким образом, вы можете получить заголовки Basic Auth, Base64 декодировать эту строку, а затем у вас есть имя пользователя (а также пароль).

Декодирование base64 в javascript может быть выполнено с использованием следующей функции, представленной в этом ответе by @ broc.seib.

decodeBase64 = function(s) {
    var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
    var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    for(i=0;i<64;i++){e[A.charAt(i)]=i;}
    for(x=0;x<L;x++){
        c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
        while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
    }
    return r;
};
0
Jens Kooij