myOpenID:http或https的ClaimedIdentifier问题?

myOpenID:http或https的ClaimedIdentifier问题?,openid,dotnetopenauth,Openid,Dotnetopenauth,当用户单击OpenIdButton登录myOpenID时,他们将导航到myOpenID登录页面,并提示输入用户名和密码 返回的ClaimedIdentifier以https开头(注意“s”) 当用户在OpenIdLogin控件中输入用户名时,返回的ClaimedIdentifier以http(no's')开头 为什么会这样?更重要的是,如果返回值可能会因登录技术的不同而变化,那么如何在数据库中依赖一致的用户名 这是一个错误还是我做错了什么 Ken一种(尽管不推荐)方法是剥离URL的协议路径 而且

当用户单击OpenIdButton登录myOpenID时,他们将导航到myOpenID登录页面,并提示输入用户名和密码

返回的ClaimedIdentifier以https开头(注意“s”)

当用户在OpenIdLogin控件中输入用户名时,返回的ClaimedIdentifier以http(no's')开头

为什么会这样?更重要的是,如果返回值可能会因登录技术的不同而变化,那么如何在数据库中依赖一致的用户名

这是一个错误还是我做错了什么

Ken

一种(尽管不推荐)方法是剥离URL的协议路径

而且,它不是库中的bug,它只是同一个提供者为不同的身份验证方法返回不同的标识符——Google也这样做(帐户vs配置文件)

当用户输入'x.myopenid.com'时,它被转换(根据规范)为“”,因此服务器返回带有http:///的标识

如果用户输入,服务器将返回带有https:///的标识


另一件事是MyOpenID应该从http重定向到https,但不这样做。

MyOpenID不会从http重定向到https,因为有一段时间许多RPs无法处理https,所以必须使用http标识符登录。正如您所说,不建议从声明的标识符中剥离协议,但一个选项是检查用户输入,如果1)没有协议,2)现有帐户数据库中存在该标识符的https条目,则添加https。从技术上讲,这仍然是违反规范的行为,但相当安全。从声明的标识符中剥离方案(协议)实际上并不安全。它完全消除了HTTPS提供的安全性。如果您的任何用户使用HTTPS保护其标识符不受DNS中毒的影响,则删除该方案将消除该保护。解决此问题的另一种方法是将RequireSsl=true设置为“HTTPS:”,这样当用户在name.myopenid.com而不是“http:”中键入时,“HTTPS:”是默认的前置方案。但它也会打破每个人仅仅使用“http:”。所有的RPs都在努力解决这个问题。特别是对于myopenid.com,您可以做的一件事是自动将所有帐户升级到,然后当用户键入其id时,检查myopenid的IAAuthenticationRequest.ProviderEndpoint,如果找到,则重置身份验证请求以使用HTTPS。当然,最简单的方法就是为myopenid.com添加一个异常。如果您想使用SREG/AX,那么无论如何都必须这样做(因为myopenid已经破坏了对这两者的支持)。如果您使用AXFetchAsSregTransform,我相信DotNetOpenAuth会为您处理它。