跨子域名使用单个OpenID

4
我正在使用OpenID,类似于StackOverflow在这里对我的用户进行身份验证。但是我真正需要做的是让该OpenID适用于我网站的所有子域。
该网站的行为方式与Kijiji相似,即每个地区都有自己的子域。
  • calgary.example.com
  • toronto.example.com
  • vancouver.example.com
  • etc
当用户登录“卡尔加里”后,再登录“多伦多”,他们将被强制在提供者处“授权”,从而导致新的OpenID,并且也导致新的登录。
我的应用程序“可以”在一个帐户下拥有多个OpenID,但这将变得难以管理。
是否有一种方法可以使提供者链接到顶级域名,随后跨所有子域工作?
我正在使用DotNetOpenAuth。
我想到的一个想法是始终强制用户在http://example.com登录,然后使用表单身份验证domain = ".example.com"允许导航到所有子域。
1个回答

5

是的。在ASP.NET控件或您的IAuthenticationRequest(如果您是以编程方式执行)上设置Realm属性为"https://*.example.com"。请注意,方案可以是http或https,但它必须与您的ReturnTo属性中使用的方案匹配(默认情况下,它将是当前请求中使用的方案)。

但是,请注意,如果您有来自Google的现有用户,则此一次更改您的Realm将导致Google为您的所有用户生成全新的标识符,因此他们将失去访问其帐户的所有权限。因此,非常重要的是要决定并保留一个单一的Realm,否则,当您更改它时,您将不得不跳过重大障碍才能将您的用户与其帐户联系起来。

但是,请不要担心通配符本身。当您将https://*.example.com设置为您的realm时,与该模式匹配的所有个别站点都将获得相同的Google标识符。


我明白了。我把它改成了 Dim realm = "http://" & Request.Url.Host,现在一切都正常了。 - Chase Florell
1
你的最终表达式似乎没有使用通配符,这表明你没有实现你的目标。我认为你要找的是 Request.Url.Scheme&":// *。"&HostStrippedDomainName - Andrew Arnott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接