我们为网站提供后端(RESTful)服务,这些服务依赖于跨多个不相关的网站唯一标识同一用户。我们一直使用电子邮件地址作为唯一标识符,但并非所有网站都使用电子邮件地址,尤其是当这些网站进行OpenID身份验证时。
那么,OpenID是否提供了多个依赖方的相同标识符(如果用户使用相同的OpenID进行身份验证)?
如果是这样,如果目标是多个不相关的网站在每个网站都拥有相同的OpenID用户时提供相同的标识符,那么会指示一系列独立网站向我们提供每个用户的用户标识符是什么? / p>
此外,我们的目标是让使用我们API的开发人员尽可能轻松。所以,如果您知道任何已经解决了这个问题的优秀API文档,那么链接将非常有用。
答案 0 :(得分:0)
在不了解您的网络服务或其所使用的语言的情况下,我不确定我的答案会有多大帮助,因为它会相当普遍且技术性较差。
响应标识/授权请求的OpenID提供商将以“声明的ID”和“身份”以及所请求的任何“属性交换”进行响应。属性交换信息可以是诸如电子邮件/用户名/语言/真实姓名等等可能是您正在寻找的内容。
Google(作为OpenID提供商)支持查询合适的号码属性交换信息,并在其文档中提供列表: https://developers.google.com/accounts/docs/OpenID#Parameters
OpenID标识对于用户应该是唯一的,但即使从同一个提供商发布,也不能将它们交叉标识到不同的网站。 (它可以是发布给它的RP独有的有向id)。 在此处查看更多信息: is openid.claimed_id static?
所有这些都说明,作为API的设计者,您定义需要使用某些信息(即电子邮件地址)来使用Web服务是完全合理的。然后将其留给希望使用您的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提供商至少会删除许多隐私问题,因为用户必须明确选择加入。
我不知道任何API可以在没有直接用户交互的情况下处理跨多个第三方网站的唯一标识用户。我编写的大多数Web服务都要求提供直接用户凭据(用户知道),或者只需将用户标识为特定客户端的唯一用户。在后一种情况下,用户身份验证并不总是必要的,客户端可以进行一揽子身份验证,然后提供自己的唯一ID来跟踪用户,让Web服务对实际构成用户的内容视而不见。不幸的是,您的要求似乎不适合这些常见情况。
在设计API时要考虑的最后一件事......
向第三方提供唯一可识别信息(即电子邮件地址)可能会引起互联网隐私环的一些问题。特别是如果从交易所获得任何经济利益(广告/直接支付/等)或者信息的使用是未知/不安全或不受欢迎的话。 http://www.ehow.com/about_5332990_legal-sell-email-list.html http://www.aclu.org/technology-and-liberty/internet-privacy
您可能希望确保目标客户(您的网络服务的使用者)在其条款中使用正确的术语,或者可以为其用户提供足够的权力,以允许他们选择退出提交到您的服务中。并清楚说明你在处理这些信息......
这样的问题可能会阻碍您对API的接受,因此值得考虑。