使用 OpenID(通过 DotNetOpenAuth)以及用户角色和其他会员提供者功能

2024-03-20

我正在构建一个我想要使用的 ASP.NET MVC 站点DotNetOpenAuth http://www.dotnetopenauth.net/实现 OpenID 登录(我完全放弃基于用户名/密码的登录)。

到目前为止,我一直在使用角色系统、配置文件系统和基本注册系统为 ASP.NET 会员提供程序的默认用户名/密码系统编写代码。现在,在迁移到 OpenID 的过程中,我预见到了一些问题,特别是与 ASP.NET 成员资格提供程序提供的成员资格控制接口.

查看 DotNetOpenAuth MVC 示例,我发现对 FormsAuthentication 系统的唯一引用是创建一个AuthCookie稍后再打电话FormsAuthentication.SignOut()。因此,我不确定是否可以在此 OpenID 系统中使用 ASP.NET 会员提供程序函数,尽管示例代码的另一部分调用User.Identity.IsAuthenticated.


此 OpenID 系统是否会与 ASP.NET 会员提供程序连接?如果没有,我可以以某种方式解决这个问题吗?

如果上述是完全不可能的,我想我的下一步行动就是滚动我自己的数据库表并手动编写代码以从我的帐户控制器使用它们。我注意到Stack Exchange 数据浏览器 http://code.google.com/p/stack-exchange-data-explorer/采用这种方法,但是这是正确的做法吗?


EDIT:为了确保我使用了正确的术语,“ASP.NET 成员资格提供程序”是指使用由 ASP.NET 生成的表的提供程序aspnet_regsql.exe tool.


它们的接口很好,但您需要做一些自定义工作。

我过去所做的是这样的:

首先,我假设您有一个半工作的 openid 实现,这意味着您可以从 openid 提供商处接收实际身份,但不确定如何处理它。

我继续使用 FormsAuthentication 作为后端,即使不使用它进行身份验证。

您将需要一个数据库表,允许您将 FormsAuthentication 用户绑定到一个或多个 openid。您可以简单地将 FormsAuthentication 用户名(尚不存在)与您从 openid 提供商收到的身份 URL 一起存储。我们将此表称为 AUTH

当有人使用 openid 对您的站点进行身份验证时,请检查它是否存在于 AUTH 表中。如果没有,你需要做两件事。调用 Membership.CreateUser() 并传入您想要的任何生成的用户名(或者电子邮件地址(如果由 openid 提供))。我使用 GUID 作为密码,因为它不会被使用。同时在 AUTH 表中放入一个条目,将会员用户名映射到 openid 声明的身份。

当有人使用 open id 对您的站点进行身份验证并且该站点已存在时,请使用与 openid 关联的用户名调用 FormsAuthentication.RedirectFromLoginPage ,并且将设置所有适当的身份验证票证。

现在您可以使用所有内置的安全对象,就像在实现 openid 之前一样。

编辑: 作为此设置的另一个好处,您将来可以选择允许用户名/密码登录。

您还可以随时更换您的会员提供商。

此外,AUTH 表的多对一性质使您可以轻松关联多个 openid。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenID(通过 DotNetOpenAuth)以及用户角色和其他会员提供者功能 的相关文章

  • 如何在C++、Qt、QML、Blackberry 10 Cascades Beta 3 SDK中制作图表/图形(如折线图、条形图、圆形图)等?

    我需要知道如何在 Blackberry 10 Cascades Beta 3 SDK QML Qt C 中制作图表 图表 如果有人可以向我展示一个例子或向我指出一些可以告诉我如何做到这一点的东西 我将不胜感激 您应该查看 QChart js
  • 是否有一种快速替代方法可以从 XNA 中的位图对象创建 Texture2D?

    我环顾四周 发现从位图创建Texture2D的唯一方法是 using MemoryStream s new MemoryStream bmp Save s System Drawing Imaging ImageFormat Png s S
  • 从对象中获取类型正在返回运行时类型[重复]

    这个问题在这里已经有答案了 我有一个简单的功能 public string getType object obj Type type obj getType return type FullName 如果您在运行时创建的字符串对象上使用此函
  • 如何将 list 对象附加到另一个对象

    在 C 中 我有两个list
  • 以 ASCII 字符串形式获取 MemoryStream 内容的快速方法

    我在 MemoryStream 中有一个 JSON 字符串 我使用以下代码将其作为 ASCII 字符串获取 MemoryStream memstream new MemoryStream Write a JSON string to mem
  • EWS 消息跟踪报告

    我一直在研究如何使用 EWS 从交换中获取消息跟踪报告 但似乎无法查明任何内容 我打算构建一个抓取日志文件的应用程序 但如果我可以通过 EWS 来完成它 那对我正在做的事情会更好 有任何想法吗 我终于能够为我的问题创建一个解决方案 我在 C
  • 在 WinForms 中显示输入对话框

    我想在我的 WinForm 应用程序中显示输入模式 我浏览过网络 但没有找到执行此操作的良好模式 我知道我必须创建另一个表单 并使用 ShowDialog 方法 你是对的 请注意 模式对话框在关闭时不会自动处理 与非模式对话框不同 因此您需
  • 在 C++ 中重用异常处理代码

    我有这两个函数 具有重复的异常处理 其唯一目的是显示错误消息 void func1 noexcept try do task do another task catch const std out of range e show msg O
  • 如何创建 .bat 文件来运行 C# 代码?

    我需要的是 我有一个 C 代码 我想构建它以便在桌面上创建一个 bat 文件 因此 当我从桌面运行这个 bat 文件时 它应该执行 C 代码 有没有办法在编译之前更改 c 项目的设置或属性 以便创建应运行此 c 代码的 bat 文件 将 C
  • C# 中的异步方法如何工作?

    我在我的一些项目中使用异步方法 我喜欢它 因为它使我的应用程序更具可扩展性 但是 我想知道异步方法如何在后台真正工作 NET 或 Windows 如何知道调用已完成 根据我进行的异步调用的数量 我可以看到创建了新线程 但并不总是 为什么 此
  • cuda中有模板化的数学函数吗? [复制]

    这个问题在这里已经有答案了 我一直在寻找 cuda 中的模板化数学函数 但似乎找不到 在普通的 C 中 如果我调用std sqrt它是模板化的 并且将根据参数是浮点数还是双精度数执行不同的版本 我想要这样的 CUDA 设备代码 我的内核将真
  • 产量回报延迟迭代问题

    我知道yield return 利用了延迟加载 但我想知道我是否可能滥用迭代器或者很可能需要重构 我的递归迭代器方法返回给定的所有祖先PageNode包括pageNode itself public class PageNodeIterat
  • 如何使用 GCC 在 C 上编译库?

    我用这些文件创建了一个库pila h and pila c 我编译文件pila c with gcc pila c c这个库运行良好 我已经测试过了 然后我又做了一个图书馆 这个库有文件pila funciones extra h and
  • LINQ 中的左外连接

    下面的代码不断给我一个错误消息 你调用的对象是空的 var partsWithDefaults from partsList1 in p join partsList2 in d on new PartNo partsList1 PartN
  • 宏中 do { } while(0) 与 ({ }) 的优点?

    Stack Overflow 上有很多关于使用的问题do while 0 在宏中 但这有点不同 我明白为什么do while 0 用于将多行代码包装在宏扩展中 但我经常看到另一种形式 The form 的优点是它是一个表达式并且可以有 返回
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • C# 中的自定义按钮:如何删除悬停背景?

    我正在尝试使用 Visual Studio 2005 对我的表单 其 FormBorderStyle none 执行自定义按钮 我在链接到该按钮的 ImageList 中有我的 3 种状态按钮图像 this btnClose AutoSiz
  • C# - 平移光标

    我正在 PictureBox 控件中实现大图像的平移 并且设置适当的方向平移光标没有问题 但是 我似乎找不到用于平底锅原点的图像 内部带有箭头的圆圈 我在哪里可以找到它 我觉得image您正在寻找的内容未包含在框架中 每个应用程序都使用自己
  • 有C语言的解释器吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话
  • 如何为单个函数设置 ICC 属性“fp-model precision”,以防止关联优化?

    我正在实施卡汉求和 http en wikipedia org wiki Kahan summation algorithm 在支持 gcc47 gcc48 clang33 icc13 和 icc14 编译的项目中 作为该算法的一部分 我想

随机推荐

  • Go测试调试

    有没有办法使用像 IntelliJ 这样的 IDE 来调试 Go 中的测试 我正在使用 IntelliJ 的 Go 插件 似乎在提供调试配置时 调试按钮被禁用 It is 可能在 Gogland 1 0 预览版 Build EAP 12 1
  • PreferredStatusBarUpdateAnimation 被忽略

    I have AuthViewController那就是呈现MainViewController像这样 let mainVC MainViewContoller mainVC modalTransitionStyle CrossDissol
  • “自调用匿名函数”的目的[重复]

    这个问题在这里已经有答案了 可能的重复 javascript 中自执行函数的目的是什么 https stackoverflow com questions 592396 what is the purpose of a self execu
  • 根据键中的值过滤字典[重复]

    这个问题在这里已经有答案了 我想过滤包含 hometown NY 的字典 name paul age 26 hometown AU gender male name mei age 27 hometown NY gender female
  • 如何在没有窗口句柄的情况下使用 RegisterDeviceNotification?

    我正在编写一个 DLL 库 该库使用 VB NET 中的 winusb 连接到 USB 设备 由于它是一个 DLL 所以我没有窗口 而且我的库的用户也可能没有窗口 例如命令行应用程序 我见过的检测设备连接和分离的示例都使用RegisterD
  • 什么是寄存器%eiz?

    在我使用转储出来的以下汇编代码中objdump lea 0x0 esi eiz 1 esi 什么是注册 eiz 前面的代码是什么意思 See 为什么选择 GCC LEA EIZ http web archive org web 200905
  • 我可以在不连接远程服务器的情况下从 SVN 导入到 Git 吗? [复制]

    这个问题在这里已经有答案了 可能的重复 如何 git svn 从 Subversion 存储库克隆最后 n 个修订版本 https stackoverflow com questions 747075 how to git svn clon
  • 哈希键的不需要的符号到字符串转换

    当我在控制器中分配时 my hash my key gt my value 并通过执行以下操作来测试该控制器 get index assigns my hash should my key gt my value 然后我收到以下错误消息 e
  • 如何在javascript中从location.href获取请求uri?

    我从中得到什么location href是这样的 http stackoverflow com questions ask 但我只想得到questions ask no 在第一个字符处 如何实现这一目标 location pathname
  • Xamarin 在通知点击时形成打开视图模型

    我正在使用此代码在通知栏中显示通知 点击通知后 将启动主要活动 是否可以使用 MvvmCross 在 Xamarin 表单应用程序中启动视图模型而不是活动 Intent notificationIntent new Intent conte
  • Chrome 中的 -webkit-backface-visibility 今天中断了吗?

    我有点困惑 因为我的项目昨天工作正常 但今天似乎不再正常工作 是的 我已经从 git 检查了以前的版本 问题 一些 div 之前隐藏了 webkit backface visibility hidden 神奇地出现了 我已将此问题隔离为小提
  • JavaScript 集合 API?

    我已经搜索了很长一段时间来寻找 JS 的 Collections API 列表 集合 令人惊讶的是我只能这样 http www coffeeblack org work jscollections http www coffeeblack
  • 我应该使用什么 gacutil.exe?

    因此 在 Win 2008 R2 Std x64 上 我有 6 六 个不同的 gacutil exe 不包括 VS 文件夹中的 位于 c Program Files Microsoft SDKs Windows v6 0A Bin c Pr
  • 使用 Python 加速(批量)插入 MySQL

    我正在部署一个应用程序来使用一些 csv 数据 我想将它们复制到 MySQL 表中 在 stackoverflow 用户的帮助下 我编写了以下代码 import csv import MySQLdb db MySQLdb connect h
  • EditText高度问题

    我正在尝试设置较小的 EditText 高度 但仍然没有成功 这是我的来源
  • 无符号整数和无符号字符持有相同的值但行为不同,为什么?

    为什么会这样 unsigned char k 1 if k 1 is false unsigned int k 1 if k 1 is true 为了演示的目的 我们假设 8 位chars 和 32 位ints unsigned char
  • 如何调整颜色的亮度?

    我想使现有颜色变暗以用于渐变画笔 有人可以告诉我该怎么做吗 C net 2 0 GDI 作为一种简单的方法 您可以只考虑 RGB 值 Color c1 Color Red Color c2 Color FromArgb c1 A int c
  • mit-scheme -- 运行脚本并退出

    我想从 makefile 评估脚本并退出 如下所示 mit scheme load fact scm 但是 在评估文件后 它不会退出 并且会出现 repl 如果我尝试 exit 原始的 它要求确认 y n 有可能解决这个问题吗 只需让我们的
  • 改变网页内容而不改变URL

    我想制作一个简单的网站 用户可以在其中输入他们的名字 但我不知道该怎么做 这就是我想要的 In my index php 将会有一个input它允许用户输入他们的名字 用户单击按钮后 我希望用户留在index php但内容不同 我可以做一个
  • 使用 OpenID(通过 DotNetOpenAuth)以及用户角色和其他会员提供者功能

    我正在构建一个我想要使用的 ASP NET MVC 站点DotNetOpenAuth http www dotnetopenauth net 实现 OpenID 登录 我完全放弃基于用户名 密码的登录 到目前为止 我一直在使用角色系统 配置