簡體   English   中英

強制重新授權使用LinkedIn與誓言

[英]Forced re-authorize using LinkedIn with Oath

如果可以強制從LinkedIn oauth api重新授權(IE要求用戶名和密碼)?

用例:為了保護敏感數據,如果有人忘記注銷,我們網站上的某些操作只能在您使用密碼重新驗證后才能進行(即使登錄時)。 我們允許使用LinkedIn登錄,在這種情況下,用戶在我們的網站上沒有單獨的密碼。 在這種情況下,我們想強制從LinkedIn api重新授權(用戶名/密碼),以便用戶仍然可以確認他的身份。

這里的重要問題是,它不能只是接受,因為用戶已經登錄LinkedIn並已接受應用程序,這不會為忘記注銷的人提供任何級別的安全性,它必須明確要求授權密碼再次。

一旦用戶登錄,就無法強制重新詢問OAuth用戶名/密碼,而不是先將其從LinkedIn注銷。

您可以通過打開啟用LinkedIn JSAPI的站點並讓用戶“使用LinkedIn登錄”來查看此操作。 完成初始OAuth登錄/授權后,在同一瀏覽器中打開一個選項卡並轉到linkedin.com - 您也將登錄該站點。

在您的情況下,如果用戶只是離開計算機而打開瀏覽器,他們仍然會登錄到您的站點和linkedin.com。 關閉瀏覽器,或通過API或linkedin.com站點注銷將解決此問題。

一種策略可能是對“敏感”數據的任何訪問都會生成注銷,這將清除cookie而不是應用程序授權,然后實例化auth對話框:

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

細節在這里 我已經測試了這個並且看起來效果很好。

當用戶希望從您的網站注銷時,您可以進行退出呼叫,只需讓他們調用iframe請求https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout並在以后返回成功的退出消息那個會發生。 聽起來很狡猾(xss攻擊),但這可能是用戶登出用戶的唯一非侵入式方式。

這是一個小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屬性值指向Ernest建議的LinkedIn注銷URL。

接下來,添加此jQuery插件以使用LinkedIn注銷URL加載隱藏的iframe。 它會等到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");
    });
  });
};

我知道這是一個我正在回答的老問題..但它可以幫助某人擺脫這個問題

我最近實現的解決方案是創建一個虛假的webview調用,其中包含用於linkedin的實際注銷URL

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

只需使用虛假的webview調用上面的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];

希望它可以幫助某人..

如果要強制用戶使用其Linked In憑據重新登錄,則只需再次通過授權過程。 但是,它必須是Linked In的整個授權過程,請求用戶授權您的應用程序並存儲新的OAuth令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM