C# 实现OpenID:识别用户

C# 实现OpenID:识别用户,c#,.net,authentication,openid,dotnetopenauth,C#,.net,Authentication,Openid,Dotnetopenauth,我所在的公司希望向外界发布一个内部网站,但也希望以某种简单的方式识别访问者。一些功能将对所有访问者可见,但大多数功能必须对经过身份验证的访问者可见。(有些功能仅限于管理员访问者。)当管理层考虑实施我们自己的身份验证系统时,我建议只使用现有的技术,该技术可以使用户名/密码的管理远离我们。(因为我们在谈论安全性时只是业余爱好者。身份验证需要非常好。) 所以我从谷歌开始,研究了他们提供的图书馆。看起来很容易使用,而且我可以获得令牌,告诉我用户已通过身份验证。但是我如何识别这个用户,以便将我们的个人资料

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

所以我从谷歌开始,研究了他们提供的图书馆。看起来很容易使用,而且我可以获得令牌,告诉我用户已通过身份验证。但是我如何识别这个用户,以便将我们的个人资料信息链接到他的ID/令牌/任何东西


我知道我遗漏了一些东西,所以要简单一点:我只需要一些例子来说明如何通过Google验证访问者,然后再获取一些令牌,我可以使用这些令牌永远链接到这个用户。(因此,没有会话令牌。)然后用户可以使用此令牌填写其个人资料。

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

要获取声明的标识符(您正在寻找的永久标识符),如果您正在使用
OpenIdTextBox
OpenIdLogin
控件,只需处理其LoggedIn事件并获取e.claimdidentifier属性。如果以编程方式执行此操作(无控件),
OpenIdRelyingParty.GetResponse()
方法返回一个
iaauthenticationresponse
接口,该接口上有一个
ClaimedIdentifier
属性,您可以从中获取


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

您知道您链接到了我问题中提到的同一个站点吗?是的,我知道这很琐碎,但不知何故,我没能发现如何获得永久标识符或任何东西来将OpenID帐户链接到我自己的用户数据库。哎哟。:)对不起,我没有检查那个链接。。。只是假设它是一个通用的openid.net站点。我已经更新了我的答案,包括更多关于获取所需永久标识符的详细信息。谢谢!正是我错过的东西。:-)我不知道你在哪里说“谷歌”。看起来,当你说“来自谷歌的OpenID”时,你的意思是“由Andrew Arnott维护并托管在谷歌代码上的DotNetOpenAuth库”。但我不确定你说的“通过谷歌验证访问者”是什么意思。你的意思是你需要你的用户只拥有谷歌帐户,而不是来自其他提供商的OpenID吗?如果你只需要“一些代币”,听起来你并不需要他们的gmail地址或其他任何东西。实际上,现在我只想让它保持简单,只支持谷歌OpenID。该项目仍然是一个概念证明,我正在努力说服管理层使用OpenID,而不是必须实现我们自己的身份验证系统。再说一次,OpenID是一个开放的标准,所以对其他提供商来说也不难使用它。。。