我现在已经在我的网站上进行了大量的 OAuth 登录。我的实现基于 WebSecurity 类,并对代码进行了修改以满足我的需要(我将 WebSecurity 源代码提取到我的代码中)。
然而,我现在面临着一系列新的问题。在我的应用程序中,我选择将用户电子邮件地址作为选择的登录标识符。它自然是独一无二的,适合这个用例。
然而,OAuth“标准”又来了。
有些提供商会将您的电子邮件地址作为“用户名”(Google)返回,有些提供商会返回显示名称(Facebook)。就目前而言,鉴于我的特定情况,我看到了两个选项:
选项 1 将更多框架源代码拉入我的解决方案,直到我可以追查 OpenIdRelyingParty 类实际交互的位置(通过 DotNetOpenAuth.AspNet 外观)并从 OpenID 提供程序发出附加信息请求。
选项 2 当用户首次使用 OpenID 提供商登录时,我可以显示一种“完整注册”表单,该表单根据所选的提供商请求缺失信息。*
选项 2 是最直接的,也可能是最快的实现方式,但也包含一些代码异味,因为必须根据所选的提供者执行不同的操作。
选项 1 将花费更长的时间,但最终会使事情更具未来性。我将需要执行更丰富的交互,因此这在这方面也具有优势。
我对代码的了解越多,WebSecurity 类本身似乎实际上非常有限,因为它以简化集成的名义隐藏了许多有用的 DotNetOpenAuth 功能。
Andrew(DNOA 的作者)说过,属性交换的东西发生在 OpenIdRelyingParty 类中,但我无法从 DotNetOpenAuth.AspNet 源代码中看到使用该类的位置,所以我不确定需要将什么源引入我的代码以启用我需要的功能。
有没有人完全类似的东西?