4

我正在尝试理解“使用 LinkedIn 登录”。我似乎只掌握了图片的一部分。

据我了解,用户在我的网站上使用 LinkedIn 登录,LinkedIn 将唯一的用户标识符返回到我的网站。

然后我以某种方式在我的网站上使用该标识符来识别用户。

但我不明白 - 一旦最终用户看到了标识符,有什么办法可以阻止他们从那时起直接使用并且不再通过 LinkedIn 登录?返回的用户 ID 必须保密,还是可以公开显示,例如在 URL 中?

另外,如何防止有人找到其他人的用户 ID,然后使用它访问我的网站?

似乎我对从LinkedIn返回的用户ID的使用方式以及与安全性相关的问题缺乏全面的了解。

有人可以解释一下吗?

谢谢

4

3 回答 3

3

我会自己回答。事实证明,您可以选择要求 LinkedIn API 也返回一个包含签名的 cookie。通过连接的 HTTPS 将此 cookie 返回到您的后端服务器,您可以在那里根据您自己的 API 密钥验证签名。瞧 - 您已经证明这是一个有效用户,并且您已经证明用户登录实际上来自 LinkedIn,而不是被欺骗。

于 2012-06-02T07:08:52.063 回答
1

当用户通过linkedin 登录时,他们的API 将返回给您他们的用户ID。这真的不是什么秘密,它只是简单地通过linkedin 告诉您您网站上的用户已经以具有该唯一标识符的用户身份登录。您不能仅仅通过知道他们的linkedin ID 来以其他用户身份登录 - 要让linkedin 的API 返回该ID,您网站上的用户必须使用用户名和密码登录linkedin。

只要您可以确定您正在访问的 API 确实是linkedin 的并且响应没有被拦截/更改/伪造,您就可以相信 API 返回的 ID 是他们网站上用户的正确 ID并且他们已经以该用户身份登录并进行了身份验证。

基本上,如果您始终使用linkedin 的API 对linkedin 用户进行身份验证,并且您的站点上没有提示“输入您的linkedin ID 进行身份验证”的表单,那么您是安全的。即使用户知道另一个用户的 ID,他们仍然需要他们的linkedin 用户名/密码,以便 API 将该 ID 返回给您。

请随意存储返回的 ID 以跟踪用户偏好/操作。您甚至可以将其与数据库中已经存在的用户相关联,并为用户提供使用存储在数据库中的用户名/密码组合(希望是加盐/散列)或通过 oauth 选项之一登录的选项。

希望这有助于澄清事情!

根据评论编辑

关于在 API 请求之后如何处理事情的另一个重点。您可以相信linkedin 返回的ID 是正确的,但在那之后,您还必须能够相信存储在您网站上的ID 仍然与您从linkedin 获得的相同。使用用户无法编辑的服务器端来存储此 ID(如 PHP 会话 - 不是 url 参数)。

于 2012-05-25T22:40:25.620 回答
0

Suppose after user authenticates with linkedin successfully,
it redirects to your page http://www.xyz.com/redirect.php.

Now you have code in redirect.php which takes oauth parameters from URL and calls for userid.

function getUserID (){
   // code which takes oauth params and calls linked in api with access token 
   //and returns userId of user
   return userID;
}

$userID = getUserID();

Now since your have $userID , create a session with $userID and redirect user to his/her home page. Check for session in home page, if session $userID is set , let user open the page , if session is not available, dont show the page and tell them to login first.

Now to your question, how do you think in this approach user can enter userID by his/her own ?

于 2012-05-26T06:16:20.830 回答