2013-02-09 152 views
0

我们为网站提供后端(RESTful)服务,这些服务依赖于跨多个不相关的网站唯一标识相同的用户。我们一直在使用电子邮件地址作为唯一标识符,但并非所有网站都始终使用电子邮件地址,尤其是当这些网站使用OpenID身份验证时。多个网站如何从同一个OpenID用户/标识中获得相同的唯一标识符?

那么,OpenID是否提供了一个唯一的标识符,在多个依赖方(如果用户使用相同的OpenID进行身份验证时)是相同的?

如果是这样,如果目标是当多个不相关的网站每个拥有相同的OpenID用户时都提供相同的标识符,那么将指示一系列独立网站为我们提供作为其每个用户的用户标识符的内容?

此外,我们的目标是尽可能为使用我们的API的开发人员提供方便。所以,如果你知道已经解决了这个问题的任何好的API文档,链接到这将是非常有用的。

回答

0

不知道任何关于您的Web服务或其编写的语言,我不确定我的答案是多么有帮助,因为它将是相当一般和较少的技术。

响应标识/授权请求的OpenID提供商将以“声明的ID”和“标识”以及请求的任何“属性交换”进行响应。属性交换信息可以是诸如电子邮件/用户名/语言/真实名称/等等,这可能是你正在寻找的东西。

谷歌(作为一个OpenID提供商)支持查询一个体面的数量属性交换信息,并在其文档中提供的清单: https://developers.google.com/accounts/docs/OpenID#Parameters

的OpenID的身份应该是唯一的用户,但不能交叉识别他们到不同的网站,即使是从同一个提供商发出。 (它可以是发给它的RP所特有的直接ID)。 查看更多关于此这里: is openid.claimed_id static?

有了这一切说,这是完全合理的,你作为API的设计,定义某些信息(如电子邮件地址),需要消耗的WebService 。然后把它交给那些希望使用你的web服务以获得这些信息(直接询问用户,或通过属性交换等)的各方。


有关OpenID的更多信息,我想看看他们的网站,特别是规格和库: http://openid.net/specs/openid-authentication-2_0.html http://openid.net/developers/libraries/

图书馆与一些好的文档为起点,用包括:


直接实现OpenID身份验证不会适用于后端web服务(即无法提供凭据)。

为了满足您跨多个第三方网站识别同一用户的需求,您可能需要成为OpenID 供应商。然后提供进一步的API以允许第三方网站上的功能让用户链接到您管理的OpenID配置文件。

没有成为身份的实际提供者......与第三方共享OpenID身份可能是潜在的安全/隐私问题,或者至少违背OpenID的规范(将交换描述为共享密钥在RP和OP之间)。虽然它可能超出了你想要做的范围,但作为OpenID提供者,至少可以消除许多隐私问题,因为用户必须明确地选择加入。

我不知道任何处理跨多个第三方网站的用户的唯一标识,而无需用户直接交互。我编写的大多数Web服务都需要提供直接用户凭据(用户知道这些凭据),或者必须仅将用户标识为特定客户端的唯一身份。在后一种情况下,用户身份验证并不总是必要的,客户端可以进行一揽子身份验证,然后提供自己的唯一ID来跟踪用户,让Web服务对实际构成用户的内容视而不见。不幸的是,您的要求似乎不适合这些常见的情况。


的最后一件事时要考虑的设计你的API ...

提供了独特的身份信息(即电子邮件地址)的第三方可能会引发一些眉毛在互联网上的隐私环。特别是如果交易所(广告/直接付款/等)有任何财务收益,或者信息的使用不明确/不安全或不受欢迎。 http://www.ehow.com/about_5332990_legal-sell-email-list.html http://www.aclu.org/technology-and-liberty/internet-privacy

您可能需要确保你的目标客户(消费者你的web服务)有权行话他们而言,也可以给他们的用户,让他们退出被提交到提供足够的动力你的服务。并明确你正在处理的信息...

像这样的问题可能会阻止接受你的API,所以这是值得考虑的。