【问题标题】:Implementing OpenID: identifying users实施 OpenID:识别用户
【发布时间】:2009-06-19 11:16:42
【问题描述】:

我工作的公司想向外界发布一个内部网站,但也想以某种简单的方式识别访问者。某些功能将对所有访问者可见,但大多数功能必须对经过身份验证的访问者可见。 (并且某些功能仅限于管理员访问者。)虽然管理层正在考虑实施我们自己的身份验证系统,但我建议只使用已经可用的现有技术,并使用户名/密码的管理远离我们。 (因为我们在谈论安全性时只是业余爱好者。身份验证需要非常好。)

所以我从 Google 的 OpenID 开始,检查了他们提供的库。看起来很容易使用,我可以获得告诉我用户已通过身份验证的令牌。但是我如何识别这个用户,以便我可以将我们的个人资料信息链接到他的 ID/Token/Whatever?

我知道我遗漏了一些东西,所以为了简单起见:我只需要一些示例来说明如何使用 Google 对访问者进行身份验证,然后获取一些我可以用来永久链接到该用户的令牌。 (因此,没有会话令牌。)然后此令牌可用于用户填写他/她的个人资料。

【问题讨论】:

  • 我很困惑你在哪里谈论“谷歌”。看起来当您说“来自 Google 的 OpenID”时,您的意思是“由 Andrew Arnott 维护并托管在 Google Code 上的 DotNetOpenAuth 库”。但我不确定您所说的“使用 Google 对访问者进行身份验证”是什么意思。你的意思是你需要你的用户只有谷歌帐户,而不是来自其他提供商的 OpenID?如果你只需要“一些令牌”,听起来你不需要他们的 gmail 地址或任何东西。
  • 其实,现在我只想保持简单,只支持 Google OpenID。该项目仍然是一个概念验证,我正在尝试说服管理层使用 OpenID 而不必实现我们自己的身份验证系统。再说一次,OpenID 是一个开放标准,因此它也应该不难用于其他提供商......

标签: c# .net authentication openid dotnetopenauth


【解决方案1】:

由于您的标签表明您的语言是 C#,因此我推荐 DotNetOpenAuth。它是免费的,并包含一些示例,这些示例将向您展示如何获取您的令牌(在 OpenID 术语中,它称为声明的标识符),您可以使用它来区分用户。

若要获取 Claimed Identifier(您正在寻找的永久标识符),如果您使用 OpenIdTextBoxOpenIdLogin 控件,只需处理其 LoggedIn 事件并获取 e.ClaimedIdentifier 属性。如果您以编程方式(无控件)执行此操作,OpenIdRelyingParty.GetResponse() 方法将返回一个 IAuthenticationResponse 接口,该接口具有您可以获得的ClaimedIdentifier 属性。

然后您可以实现一个 ASP.NET RoleProvider(真的很简单),它将允许一些 OpenID 声明的标识符属于管理员角色,从而允许您的标准 ASP.NET 授权技术根据个人的方式逐步锁定他们已通过身份验证。

【讨论】:

  • 您确实意识到您链接到我的问题中提到的同一个网站?是的,我知道这是微不足道的,但不知何故,我没有发现如何获得永久标识符或任何将 OpenID 帐户链接到我自己的用户数据库的方法。
  • 哎呀。 :) 对不起,我没有检查那个链接......只是假设它是一个通用的 openid.net 站点。我已经更新了我的答案,以包含有关获取所需永久标识符的更多详细信息。
  • 谢谢!正是我缺少的东西。 :-)
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2021-10-08
  • 1970-01-01
  • 2016-04-11
  • 2020-09-19
相关资源
最近更新 更多