如果可以从LinkedIn oauth api强制重新授权(I.E要求输入用户名和密码)?
USECASE: 为了保护敏感数据,如果有人忘记注销,我们网站上的某些操作只有在您使用密码重新验证后才能进行(即使登录时)。我们允许使用LinkedIn登录,在这种情况下,用户在我们的网站上没有单独的密码。在这种情况下,我们希望强制从LinkedIn api重新授权(用户名/密码),以便用户仍然可以确认他的身份。
这里的重要问题是它不能接受,因为用户已经登录LinkedIn并已接受应用程序,这不会为忘记注销的人提供任何级别的安全性,它必须明确要求再次通过密码授权。
答案 0 :(得分:3)
用户登录后无法强制重新询问OAuth用户名/密码,而不是先将其从LinkedIn注销。
您可以通过打开启用LinkedIn JSAPI的网站并让用户“使用LinkedIn登录”来查看此操作。完成初始OAuth登录/授权后,在同一浏览器中打开一个标签并转到linkedin.com - 您也将登录该站点。
在您的情况下,如果用户只是离开计算机而不打开浏览器,他们仍然会登录您的站点和linkedin.com。关闭浏览器,或通过API或linkedin.com站点注销将解决此问题。
一种策略可能是对“敏感”数据的任何访问都会生成注销,这将清除cookie而不是应用程序授权,然后实例化身份验证对话框:
IN.User.logout();
IN.UI.Authorize().place();
详情here。我已经对此进行了测试,似乎运行良好。
答案 1 :(得分:1)
当用户希望从您的网站退出时,您可以进行退出呼叫, 只需让他们调用https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout的iframe请求,并在发生这种情况时返回成功的注销消息。听起来很狡猾(xss攻击),但这可能是唯一一种记录用户的非侵入式方法。
答案 2 :(得分:0)
这是我写的一个小jQuery插件,用来帮助实现这个目标。
首先,在您的应用程序中为您的标准“注销”添加data-hidden-iframe
属性。
<a href="/signout" data-hidden-iframe="https://www.linkedin.com/secure/login?session_full_logout=&trk=hb_signout">Sign out</a>
请注意,data-hidden-iframe
属性值指向Ernest建议的LinkedIn注销网址。
接下来,添加此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");
});
});
};
答案 3 :(得分:0)
我知道这是一个我正在回答的老问题..但它可以帮助某人摆脱这个问题
我最近实施的解决方案只是创建了一个假的webview
调用,其中包含了用于
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];
希望它有所帮助..
答案 4 :(得分:-3)
如果您想强制用户使用他们的Linked In凭据重新登录,那么只需再次通过授权过程即可。但是,它必须是Linked In的整个授权过程,请求用户授权您的应用程序并存储新的OAuth令牌。