2012-05-25 93 views
4

我想了解“使用LinkedIn登录”。我似乎只是抓住了一部分的图片。正确使用“使用LinkedIn登录”来识别我的网站上的用户?

据我所知,用户在我的网站上登录LinkedIn,LinkedIn将一个唯一的用户标识符返回给我的网站。

不知何故,我然后在我的网站上使用该标识符来标识用户。

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

此外,什么是防止某人找到其他人的用户名,然后用它来访问我的网站?

好像我错过了关于如何使用从LinkedIn返回的用户ID的理解的整个板块,以及哪些问题与安全有关。

有人可以解释一下吗?

感谢

回答

3

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

1

当用户通过LinkedIn登录,他们的API将返回到你自己的用户ID。这真的不是秘密,它只是告诉你,你的网站上的用户已经以该用户的身份登录,并拥有该唯一标识符。只有知道他们的linkedin ID,您才能以其他用户身份登录 - 对于linkedin的API返回该ID,您网站上的用户必须使用用户名和密码登录linkedin。

只要你确定你正在访问的API确实是linkedin的,并且响应没有被拦截/修改/伪造,你可以相信这个API返回的ID是一个正确的ID用户在他们的网站上,并且他们已经以该用户的身份登录和认证。

基本上,如果您始终使用linkedin的API对linkedin用户进行身份验证,并且没有在您的网站上提供“输入您的linkedin ID进行身份验证”的提示,那么您很安全。即使用户知道其他用户的ID,他们仍需要他们的linkedin用户名/密码才能将API返回给您。

是否随意存储返回的ID以跟踪用户偏好/操作。你甚至可以将它与已经存在于数据库中的用户相关联,并给予用户使用数据库中存储的用户名/密码组合(希望有盐渍/散列)或通过其中一个oauth选项登录的选项。

希望这有助于清理事情!

EDITED BASED简评关于你如何处理事情的API请求后强调

的另一点。你可以相信由linkedin返回的ID是正确的,但在此之后,你还必须能够相信存储在你的网站上的ID仍然是你从linkedin获得的相同内容。使用用户无法编辑的服务器端来存储此ID(如PHP会话 - 不是url参数)。

+0

对不起,我还没有真正得到它。因此,如果我想使用LinkedIn登录我的新网站,请按照说明操作并添加“使用LinkedIn登录”功能。用户登录后,我的网页将保存其用户标识。我将这个用户ID包含到我的服务器的每个请求中。在我网站的后端,我在每个入站请求上检查这个用户ID。没有用户标识的请求未登录,因此被拒绝。请确保拥有我可以信任的登录用户标识,并且在我的数据库查询中使用该用户标识来限制访问。正确? –

+0

基本上,您所说的所有内容都是准确的,除了“如何在每个入站请求中包含此ID”的详细信息。您可以相信linkedin的ID是正确的,但在此之后,您还必须能够相信存储在您网站上的ID仍然是您从linkedin获得的相同内容。使用用户无法编辑的服务器端来存储此ID(如PHP会话),并且您很好! 如果用户知道他们的linkedin ID(或其他人的确是 - 他们可以直接从linkedin获得这些信息),但是他们不能被允许改变它。 – rawb

+0

那么我们需要保密LinkedIn登录后提供的用户ID吗?例如,根据用户ID创建一个URL是一个不好的主意,例如www.example.org/(linkedinuserid)这会使任何人都可以使用linkedinuserid登录到我们的应用程序吗? –

0

假设用户通过linkedin认证成功后,
它重定向到您的页面http://www.xyz.com/redirect.php

现在,您有重定向的代码。PHP从URL获取oauth参数并调用用户标识。

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

$userID = getUserID(); 

现在,因为你有$userID,与$userID创建一个会话并重定向用户到他/她的主页。检查主页中的会话,如果设置会话$userID,让用户打开页面,如果会话不可用,请不要显示页面并告诉他们先登录。

现在你的问题,你认为在这种方法中,用户可以通过他/她自己输入userID