Oauth 通过宣誓强制重新授权使用LinkedIn

Oauth 通过宣誓强制重新授权使用LinkedIn,oauth,passwords,authorization,linkedin,Oauth,Passwords,Authorization,Linkedin,是否可以从LinkedIn oauth api强制重新授权(即请求用户名和密码) 用例: 为了保护敏感数据,如果有人忘记注销,只有在您使用密码重新验证后(即使在登录时),才能在我们的网站上执行某些操作。我们允许使用LinkedIn登录,在这种情况下,用户在我们的网站上没有单独的密码。在这种情况下,我们希望强制LinkedIn api重新授权(用户名/密码),以便用户仍然可以确认其身份 这里的重要问题是,它不能仅仅接受,因为用户已登录LinkedIn并已接受应用程序,这不会为忘记注销的用户提供任何

是否可以从LinkedIn oauth api强制重新授权(即请求用户名和密码)

用例: 为了保护敏感数据,如果有人忘记注销,只有在您使用密码重新验证后(即使在登录时),才能在我们的网站上执行某些操作。我们允许使用LinkedIn登录,在这种情况下,用户在我们的网站上没有单独的密码。在这种情况下,我们希望强制LinkedIn api重新授权(用户名/密码),以便用户仍然可以确认其身份


这里的重要问题是,它不能仅仅接受,因为用户已登录LinkedIn并已接受应用程序,这不会为忘记注销的用户提供任何级别的安全性,它必须明确地再次请求密码授权。

一旦用户登录,除了先从LinkedIn注销外,没有办法强制重新请求OAuth用户名/密码

您可以通过打开启用LinkedIn JSAPI的站点并让用户“使用LinkedIn登录”来看到这一点。完成初始OAuth登录/授权后,在同一浏览器中打开一个选项卡,然后转到linkedin.com-您也将登录到该网站

在您的情况下,如果用户只是离开计算机,让浏览器保持打开状态,他们仍将同时登录您的网站和linkedin.com。关闭浏览器,或通过API或linkedin.com网站注销将解决此问题

一种策略可能是,对“敏感”数据的任何访问都会生成注销,这将清除cookie,但不会清除应用程序授权,然后实例化身份验证对话框:

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

细节。我已经对此进行了测试,它似乎运行得很好。

如果您想强制用户使用其链接的登录凭据重新登录,那么只需让他们再次完成授权过程即可。但是,它必须是整个授权过程,在请求用户授权您的应用程序和存储新的OAuth令牌时进行链接。

当用户希望从您的站点注销时,您可以执行注销呼叫,
只需让他们调用iframe请求,并在发生这种情况时返回成功的注销消息。听起来很诡异(xss攻击),但这可能是唯一一种非侵入性的用户注销方式。

这里有一个我编写的小jQuery插件来帮助实现这一点

首先,将
数据隐藏iframe
属性添加到应用程序中的标准“注销”中

<a href="/signout" data-hidden-iframe="https://www.linkedin.com/secure/login?session_full_logout=&amp;trk=hb_signout">Sign out</a>
对于那些无法阅读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");
    });
  });
};
$(文档).ready(函数(){
返回$(“[data hidden iframe]”)。loadhiddenIframeBeforeClick();
});
$.fn.loadhiddenIframeBeforeClick=函数(){
返回这个.on(“click.iframe”,function()){
var href,
_这个=这个;
if($(this).data(“已设置框架”))返回;
event.preventDefault();
event.stopPropagation();
href=$(this).data(“隐藏的iframe”);
$(this).data(“已设置框架”,true);
返回$(“”).attr(“src”,href).appendTo(“body”).load(函数(){
返回$(_this).trigger(“单击”);
});
});
};

我知道这是我要回答的一个老问题。。但它可以帮助人们摆脱这个问题

我最近实现了一个解决方案,只需使用linkedin的实际注销url创建一个假的
webview
调用即可

只要用一个假的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];

希望它对某人有所帮助。

是的,但问题是如何做。您需要“忘记”您拥有此用户的OAuth令牌,然后在应用程序中再次启动OAuth进程。嗯,这仍然不起作用,因为授权应用程序不需要您使用密码签名,因此,如果用户已经登录,只需单击“确定”即可。谢谢,但是如果用户已将其登录信息保存在浏览器中,这将如何工作?如果是正常的登录调用,浏览器可能会被允许预先填充字段,从而使任何安全性失效。所以它可以解决“我忘了在图书馆注销”的问题,因为你没有在那里保存东西。但不是“我工作时忘了锁电脑”的问题,因为在那里人们会保存他们的密码。我搜索得越多,就越确信LinkedIn根本不提供这个选项。所以我得做点别的。我很困惑。。。您的问题询问如何强制用户重新输入密码,当演示如何执行时,您说它不处理用户将密码存储在本地浏览器中的情况。。。如何触发清除网页中本地存储的密码?除非你控制了表单(当然我们没有,因为它在LinkedIn上)。但是一些API(如Facebook)实现了一个重新验证调用,该调用不允许浏览器预先填充表单,这是专为此类情况而设计的。所以问题是LinkedIn是否有类似的功能。这不是你上面的问题明确要求的(你可能想链接到你所指的Facebook功能),所以你可能想相应地编辑它。不,LinkedIn API中没有任何东西会强制浏览器禁用对表单数据的记忆。由于整个要点(在最后一段)是强制进行实际的重新授权,我认为这是显而易见的,但下次我会更加明确。不管怎样,谢谢你的回答。这似乎不再有效了。上面说你已经注销了。但实际上您仍然登录。
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];