【问题标题】:Implementing OpenID (DotNetOpenAuth) with Classic ASP使用经典 ASP 实现 OpenID (DotNetOpenAuth)
【发布时间】:2025-12-10 14:45:01
【问题描述】:

我花了无数时间阅读各地的文档,但在实现最新版本的 DotNetOpenAuth (3.4.5.10202) 中提供的经典 ASP 示例时仍然遇到问题。

具体来说,我不确定我需要在 login.asp 中更改哪些值才能查看它是否有效/是否适合我。对于下面的代码,如果我想使用 Google 作为 OpenID 提供程序,我应该将 requestURL 更改为 www.google.com/accounts/o8/id 还是 www.google.com/accounts/o8/ud? (*新用户超链接限制:/)

`realm = "http://" + Request.ServerVariables("HTTP_HOST") + "/classicaspdnoi/"
thisPageUrl = "http://" + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("URL")
requestUrl = "http://" + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("HTTP_URL")`

我在这方面真的很难过,而且我在研究上多花了大约 8 个小时(即用谷歌搜索直到我的手指流血,并试图消化从 OpenID 到联合登录等所有内容的数千页文档),而不是我必须做的花费。

任何建议或指导将不胜感激。

顺便说一句,我见过this post,但是除了示例文件中的文本之外,没有很多关于经典 ASP 实现的文档。

【问题讨论】:

  • 这对我来说没有意义。使用 Classic ASP 示例代码,我之前一直在输入我的 gmail 凭据。在阅读了this post 之后,一时兴起,我决定尝试一些愚蠢的方法,比如插入谷歌 URL www.google.com/accounts/o8/id。你知道什么......它引导我到谷歌询问我是否要允许我的网站进行身份验证,然后将我重定向回带有十几个查询字符串名称/值对的调用页面。哎呀。进步。但感觉不像。

标签: iis asp-classic openid dotnetopenauth


【解决方案1】:

你在正确的轨道上。 Google 的 OP 标识符(您必须输入才能登录 Google)是 https://www.google.com/accounts/o8/id

  • realm 是您主页的 URL
  • thisPageUrl 是用户登录 Provider 后 Provider 应将用户重定向回的 URL。
  • 'requestUrl' 是当前传入请求的完整 URL,包括查询字符串。它可能带有 OpenID 响应。

因此,您可能需要更改的唯一 URL 是 realm 变量。

既然您说您已经从 Google 收到了包含查询字符串中的一堆内容的响应,那么处理该响应的代码应该会启动。您可能想要自定义实际的登录代码(设置会话变量)到您网站需要的任何内容。

DotNetOpenAuth v3.4.5 中的经典 ASP COM 服务器确实使您能够获取 Google 用户的电子邮件地址。您确实需要稍微修改示例:

-redirectUrl = dnoi.CreateRequestWithSimpleRegistration(Request.Form("openid_identifier"), realm, thisPageUrl, "nickname,email", "fullname")
+redirectUrl = dnoi.CreateRequestWithSimpleRegistration(Request.Form("openid_identifier"), realm, thisPageUrl, "", "email")

应该这样做。如果不是,可能是 Google 需要 RP 发现才能成功。无论如何,RP Discovery 都是一件好事。执行此操作的说明位于http://blog.nerdbank.net/2008/06/why-yahoo-says-your-openid-site.html。请注意,虽然我在写这篇文章时并没有考虑到经典的 ASP,但您可能需要稍微调整一些技术。

【讨论】:

  • 安德鲁,谢谢。我回复了 Google Groups 线程,但也想我会问这个......根据我设法收集的信息,我将无法在“客户回复”中找回电子邮件地址。我知道他们(谷歌)没有实现 openid 框架的特定功能,但是否可以提供一些替代方法,以便我可以找到用户的电子邮件地址,以便在我的网站上为他们创建存根帐户?
  • 我已将 Google 电子邮件解决方案添加到我的答案中。