子域上的单个OpenID

时间:2010-12-30 00:51:36

标签: openid dotnetopenauth openid-provider

我使用的OpenID与StackOverflow上的OpenID非常相似,可以对我的用户进行身份验证。我真正需要做的是让OpenID在我网站的所有子域中工作。

该网站与Kijiji的行为大致相同,因为每个地区都有自己的子域名

  • calgary.example.com
  • toronto.example.com
  • vancouver.example.com

当用户登录“calgary”并稍后登录“toronto”时,他们将被迫在提供商处“给予许可”,从而产生新的OpenID并导致新的登录。

我的应用“可以”在一个帐户下拥有多个OpenID,但管理起来会很麻烦。

有没有办法让提供商链接到顶级域名,然后跨所有子域工作?

我正在使用DotNetOpenAuth。

我认为我一直强迫用户登录http://example.com,然后使用表单身份验证domain = ".example.com"以允许导航到所有子域。

1 个答案:

答案 0 :(得分:5)

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

但请注意,如果您拥有来自Google的现有用户,则您对Realm的一次性更改将导致Google为您的用户生成全新的标识符,因此他们将无法访问其帐户。因此,最重要的是决定并保留一个单独的领域,或者您必须跳过主要的环节才能在以后更改它时将用户绑定到他们的帐户。

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