Принудительная повторная авторизация с использованием LinkedIn с присягой - PullRequest
4 голосов
/ 13 октября 2011

Если возможно принудительно выполнить повторную авторизацию (например, запрашивая имя пользователя и пароль) из API-интерфейса LinkedIn oauth?

USECASE: Чтобы защитить конфиденциальные данные, в случае, если кто-то забудет выйти из системы, некоторые действия на нашем сайте могут быть предприняты только после того, как вы подтвердите свой пароль (даже при входе в систему). Мы разрешаем вход через LinkedIn, в этом случае у пользователя нет отдельного пароля на нашем сайте. В этом случае мы хотели бы принудительно выполнить повторную авторизацию (имя пользователя / пароль) в API LinkedIn, чтобы пользователь мог подтвердить свою личность.

Важной проблемой здесь является то, что он не может просто принять, потому что пользователь уже вошел в LinkedIn и принял приложение, это не обеспечит какой-либо уровень безопасности для того, кто забыл выйти из системы, это требует подробного запроса. для авторизации по паролю еще раз.

Ответы [ 5 ]

3 голосов
/ 13 октября 2011

Нет способа принудительно повторно запросить имя пользователя / пароль OAuth после того, как пользователь вошел в систему, кроме как сначала выйти из него из LinkedIn.

Вы можете увидеть это в действии, открыв LinkedIn.Сайт с поддержкой JSAPI и имеющий пользователя «Войти через LinkedIn».После того, как вы завершили первоначальный вход / авторизацию OAuth, откройте вкладку в том же браузере и перейдите на linkedin.com - вы также войдете на сайт.

В вашем случае, если пользовательпросто уходит от компьютера, оставляя браузер открытым, они все равно будут заходить как на ваш сайт, так и на linkedin.com.Закрытие браузера или выход через API или сайт linkedin.com решит эту проблему.

Одна из стратегий может заключаться в том, что любой доступ к «конфиденциальным» данным приводит к выходу из системы, который удаляет файлы cookie, но неавторизация приложения, а затем создать экземпляр диалогового окна авторизации:

IN.User.logout();
IN.UI.Authorize().place();

Подробности здесь .Я проверил это, и это, кажется, работает хорошо.

1 голос
/ 17 ноября 2011

Вы можете сделать звонок выхода, когда пользователь хочет выйти из вашего сайта, просто заставьте их вызвать запрос iframe на https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout и вернуть сообщение об успешном выходе из системы, когда это произойдет. Звучит странно (атака xss), но это, вероятно, единственный ненавязчивый способ выхода пользователя из системы.

0 голосов
/ 24 апреля 2013

Я знаю, что это старый вопрос, на который я отвечаю .. Но он может помочь кому-то выбраться из этой проблемы

Есть решение, которое я недавно реализовал, просто создать поддельный вызов webviewс фактическим URL-адресом выхода для linkedin, который составляет

https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout

Просто вызовите указанный выше URL с поддельным веб-просмотром, в случае iOS это может быть

UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectZero];
NSURLRequest *req=[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout"]];
webView.delegate=self;
[webView loadRequest:req];

Надеждаэто помогает кому-то ..

0 голосов
/ 09 января 2013

Вот небольшой плагин jQuery, который я написал, чтобы помочь в этом.

Сначала добавьте атрибут data-hidden-iframe к вашему стандартному «Выходу» в приложении.

<a href="/signout" data-hidden-iframe="https://www.linkedin.com/secure/login?session_full_logout=&amp;trk=hb_signout">Sign out</a>

Обратите внимание, что значение атрибута data-hidden-iframe указывает на URL выхода из LinkedIn, который рекомендовал Эрнест.

Затем добавьте этот плагин jQuery, чтобы загрузить скрытый iframe с URL-адресом выхода LinkedIn.Он будет ждать, пока iframe полностью загрузится, прежде чем вернуться к поведению щелчка по умолчанию.

$(document).ready ->
  $("[data-hidden-iframe]").loadhiddenIframeBeforeClick()

$.fn.loadhiddenIframeBeforeClick = ->
  this.on "click.iframe", ->
    return if $(this).data("already-iframed")
    event.preventDefault()
    event.stopPropagation()
    href = $(this).data("hidden-iframe")
    $(this).data("already-iframed", true)
    $("<iframe style='display:none;'>").attr("src", href).appendTo("body").load =>
      $(this).trigger("click")

Для тех, кто не может прочитать CoffeeScript, вот эквивалентный JavaScript:

$(document).ready(function() {
  return $("[data-hidden-iframe]").loadhiddenIframeBeforeClick();
});

$.fn.loadhiddenIframeBeforeClick = function() {
  return this.on("click.iframe", function() {
    var href,
      _this = this;
    if ($(this).data("already-iframed")) return;
    event.preventDefault();
    event.stopPropagation();
    href = $(this).data("hidden-iframe");
    $(this).data("already-iframed", true);
    return $("<iframe style='display:none;'>").attr("src", href).appendTo("body").load(function() {
      return $(_this).trigger("click");
    });
  });
};
0 голосов
/ 13 октября 2011

Если вы хотите заставить пользователя повторно войти в систему со своими учетными данными Linked In, просто снова проведите его через процесс авторизации. Однако это будет весь процесс авторизации, когда Linked In попросит пользователя авторизовать ваше приложение, а вы сохраните новый токен OAuth.

...