在 .NET 中使用 FB Connect / Google OAuth 登录

2024-03-26

我希望允许我的用户使用我的登录系统、FB Connect 或 Google Login 登录我的网站。我不想仅使用大型库(如 dotnetOpenAuth)来实现这两个选项 - 那么我应该如何实现这一点?

其他问题 - 我应该如何将 FB/Google 用户绑定到我的内部用户系统?我想允许使用它们登录(例如,我可以使用 FB 登录,然后使用 Google 登录,并且仍然绑定到同一用户)。

我正在使用 ASP.NET MVC 2

Thanks!


如果你不喜欢使用像这样的大库DotnetOpenAuth http://www.dotnetopenauth.net/您必须手动实施 OpenID 协议。这是规格 http://openid.net/developers/specs/你需要遵守。

话虽这么说,我建议您使用现有的库。DotnetOpenAuth是 .NET 的参考库。

还有一点要注意的是:OpenId 和 OAuth 是不同的标准,旨在实现不同的目标:OpenId用于身份验证OAuth是为了授权。

至于识别可以从不同 OpenID 提供商登录的同一用户,您将需要一些东西来识别他们。例如,使用 DotnetOpenAuth,在向 OpenID 提供商创建身份验证请求时,您可能需要全名和电子邮件:

using (var openid = new OpenIdRelyingParty())
{
    var request = openid.CreateRequest(Identifier.Parse(openid_identifier));

    request.AddExtension(new ClaimsRequest
    {
        BirthDate = DemandLevel.NoRequest,
        Email = DemandLevel.Require,
        FullName = DemandLevel.Require
    });
}

并使用此信息来识别内部数据库中的用户。

所以这是我的想法:

  1. 您创建一个内部数据库表,其中将包含您的站点用户。一开始这个表是空的。
  2. 用户来到您的网站并希望使用它。他尚未经过身份验证,因此您向他索要凭据。您让他能够选择他的 OpenId 提供商并准备身份验证请求并将他重定向到他的提供商进行身份验证。
  3. 用户通过其提供商进行身份验证并被重定向回您的网站。此时,您知道他声称的身份,并将该用户添加到您的用户表中。现在,用户可以随时返回您的网站并登录。
  4. 您可以为经过身份验证的用户提供添加另一个 OpenId 提供程序的可能性(就像 StackOverflow 所做的那样)。重要的想法是,用户需要已经通过您网站的身份验证才能执行此操作。因此,他可以输入替代的 OpenId 提供商并重定向到该提供商进行身份验证。一旦他通过身份验证,他就会被重定向回您的站点,并且因为他已经通过您的站点的身份验证,您可以将他的替代 OpenId 提供商添加到用户表中。
  5. 将处理来自 OpenId 提供程序的重定向的控制器操作应该检查用户是否已经通过您的站点的身份验证,如果没有使用FormsAuthentication.GetAuthCookie并传递所声称的身份。如果您的内部用户表中不存在所声明的身份,您需要添加它。如果用户已经通过您网站的身份验证,则意味着他正在向其个人资料中添加替代 OpenId 提供商,因此您需要更新用户表并向其中添加新提供商。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 .NET 中使用 FB Connect / Google OAuth 登录 的相关文章

随机推荐

  • 在 Angular 2 中使用 Sass

    我正在尝试设置Sass in my Angular 2项目 基本上据我了解 有两种方法可以创建 Angular 2 项目 1 使用angular cli https github com angular angular cli https
  • 用 pandas 计算指数移动平均线

    我尝试用 pandas 计算 ema 但结果不好 我尝试了两种技术来计算 第一个技术是panda的函数ewn window 100 c 2 float window 1 df 100ema df close ewm com c mean 但
  • 如何制作Maven项目的“胖罐子”? [复制]

    这个问题在这里已经有答案了 使用 IntelliJ 我刚刚创建了一个新的 Maven 项目并将以下内容添加到 pom 文件中http undertow io downloads html http undertow io downloads
  • 我应该在 FluentValidation 中创建一个新的集合类型吗?

    我试图找到 FluentValidation 中是否有可用的方法 允许在根级别验证集合的验证器 例如如下所示 验证器可用于CustomerValidator为一堂课Customer 使用 FluentValidation public cl
  • 使用配置文件并行执行 FirefoxDriver 测试共享相同的配置文件副本

    一段时间以来 我们一直在使用 FirefoxDriver 执行一组基于 WebDriver 2 25 0 的自动化测试 测试由基于 Maven 3 0 的构建及其 FailSafe 插件并行执行 四核机器上每个核心 2 个线程 每个测试都有
  • 获取标签内的所有节点

    我有这样的代码 div Lorem ipsum dolor sit amet p This is a paragraph p br span This is a span span Lorem ipsum dolor sit amet di
  • 当应用程序处于信息亭模式时拨打电话

    我们正在开发一款 Android 应用程序 旨在取代默认的 Android 拨号器并自行处理设备中正在进行的所有呼叫 到目前为止 该应用程序按预期工作 我们可以通过启动来处理来电和拨打电话ACTION CALL意图 但是 此应用程序旨在通过
  • JQuery 从提交函数内部提交表单

    以下是我想在 JQuery 脚本中执行的操作 在下面的提交函数 第 4 个 中 我想确定表单是否有文件输入并使用 ajax 提交 或者只是不使用 ajax 的常规表单提交 换句话说 如果表单已上传 则进行常规提交 我在下面的提交功能中写了这
  • 从 JSON 对象中删除键值对

    我下面有这个 JSON 对象 XXX 2 YYY 3 ZZZ 4 XXX 5 YYY 6 ZZZ 7 XXX 1 YYY 2 ZZZ 3 我想从 json 对象中删除 YYY 键值 以便新的 json 对象如下所示 XXX 2 ZZZ 4
  • 如何解决违反迪米特法则的问题?

    我和一位同事为我们的客户设计了一个系统 我们认为我们创建了一个漂亮简洁的设计 但我对我们引入的一些耦合遇到了问题 我可以尝试创建一个示例设计 其中包含与我们的设计相同的问题 但如果您原谅我 我将创建我们设计的摘录来支持该问题 我们正在开发一
  • 如何在 React 中触发函数之前等待 setState 完成?

    这是我的情况 在 this handleFormSubmit 上我正在执行 this setState 在 this handleFormSubmit 内部 我调用 this findRoutes 这取决于 this setState 的成
  • 找不到使用 System.Web.UI.HtmlControls 命名空间

    我尝试了各种使用方法System Web UI HtmlControls 但我没有找到任何参考 我如何使用该命名空间 转到项目的参考文献并确保 System Web 位于其中 如果没有 右键单击 添加引用 NET 然后添加 System W
  • Sublime Text 2 插件可按字母顺序对函数进行排序

    我正在我的应用程序中构建许多函数 现在我想按字母顺序排列它们 Sublime Text 2 中是否有任何函数可以自动执行此操作 应该改变这些 public function login 1 public function about pub
  • Jersey 2:过滤器和@Context注入

    我有以下问题 ContainerRequestFilter 是一个单例 但是阅读以下内容 Jaxrs 2 0 Oracle 规范 http download oracle com otn pub jcp jaxrs 2 0 fr eval
  • 使用 XDocument 加载编码为 UTF 16 的 xml

    我正在尝试使用 XDocument 方法读取 xml 文档 但当 xml 有时我收到错误 当我手动删除编码时 它工作得很好 我收到错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 我尝试搜索并找到了这里 gt 为什么包含
  • 更新ImageField时如何删除旧图像?

    我正在使用 Django 创建一个库存照片网站 我的模型中有一个 ImageField 问题是当用户更新图像字段时 原始图像文件不会从硬盘中删除 更新后如何删除旧图像 Use Django 清理 https github com un1t
  • AF_UNIX 相当于 Windows [重复]

    这个问题在这里已经有答案了 我想知道如何在 Windows 上使用类似于 Unix Domain Socket 的功能 行为是 一个进程将成为 服务器 并接收来自其他进程的连接 并且它可以保留和使用来自不同进程的连接 就像 TCP 套接字一
  • Intellij - 如何制作一个可以通过 CLI 或 Web 服务执行 IDE 操作的插件?

    我需要一些帮助来开始制作特定的 IntelliJ 插件 我想制作一个 IntelliJ 插件 这样您就可以从 CLI 或者从 Web 服务 如果更容易的话 启动 IntelliJ 操作 例如 我已经用 gradle 脚本构建了我的项目 但我
  • 顶点缓冲区对象(删除过程)opengl

    我什么时候应该调用 glDeleteBuffersARB 我应该在申请结束后做吗 我可以以某种方式自动化删除顶点缓冲区对象的过程吗 例如 smart ptr 之类的东西 绝不 你永远不应该打电话glDeleteBuffersARB 十多年来
  • 在 .NET 中使用 FB Connect / Google OAuth 登录

    我希望允许我的用户使用我的登录系统 FB Connect 或 Google Login 登录我的网站 我不想仅使用大型库 如 dotnetOpenAuth 来实现这两个选项 那么我应该如何实现这一点 其他问题 我应该如何将 FB Googl