DotNetNuke中Membership Provider机制

简介:

摘要:一直困扰于DotNetNuke众为什么Users表和Aspnet_Users之类的表没有引用关联性,最近在看《DotNetNuke 4高级编程》的时候终于明白了。

Users表是DotNetNuke自己的用户表,而aspnet_之类的表asp.net 2.0的成员资格提供程序(Membership provider),这些表用于用户验证的,就像用户的密码就存在表aspnet_membership中,而且密码是密文加密的。

下面是引用书中的一段内容。

为了实现成员资格提供程序的全部好处,认可用户信息可以从DotNetNuke具体化,并且能够存放在一个独立于主数据存储的数据存储中非常重要。例如,DotNetNuke可以使用Microsoft SQL Server作为它的数据库来存储内容和系统设置,但是成员资格提供程序可以用Windows验证、LDAP或者其他机制来处理验证和授权。因为安全可以使用提供程序模型具体化,所以确保成员资格提供程序的实现没有定制提供程序使用的任何代码或者数据库表非常重要。成员资格提供程序使用的数据表必须独立于其他核心DotNetNuke表。DotNetNuke数据和成员资格提供程序数据之间不能实施引用完整性(referential integrity),而且不也不能使用级联删除(casecade delete)或者其他数据级同步方法。简而言之,就是所有的秘密都发生在DotNetNuke的业务逻辑层。

在实现成员资格提供程序过程中所面临的挑战之一,就是如何处理DotNetNuke内部支持、但成员资格提供程序并不支持的字段。理想情况下,解决方案应该将DotNetNuke中所有与验证/授权相关的表彻底替换为成员资格提供程序使用的表。但是无法实现这种解决方案,这是因为DotNetNuke中的验证/授权表已经与应用程序中许多已有的和必需的特性绑定在一起。例如,DotNetNukeUsers表中有UserID列,用来为每个用户存储一个唯一的标识符。而UserID在几乎所有的核心和第三方模块以及核心本身都大量使用。UserID的最大问题就是成员资格提供程序中没有这一字段。相反,成员资格提供程序使用了Useranme作为应用程序中用户的唯一标识。这里的挑战就是DotNetNuke需要一种方式来维持UserID,从而保持依赖于UserIDDotNetNuke功能。这只是一个由微软公司提供的默认成员资格提供程序不能处理的特性的例子。

最终,DotNetNuke需要维护一个附属表来支持不能由成员资格提供程序管理的DotNetNuke特性。这样做的目的就是为了在DotNetNuke表中维护足够的信息,以使DotNetNuke的功能不会丢失,并且还可以分担成员资格提供程序表中的一些负担。最终生成了一个与成员资格提供程序中的表对应的数据模型,如图所示。

 

注意,上面的表和下面的表没有数据库关系。他们之间的连接只是为了标识他们之间在理论上的关系,而不是在数据库中的实际关系。

因为门户网站、配置文件、用户和角色的数据存储在多个不相关的表中,所以由业务逻辑层负责聚集这些数据。例如,如果不收集aspnet_Users表(位于成员资格提供程序中)和Users表(位于自身的DotNetNuke表中)中的数据,就无法得到一个完整的用户表示。

除了聚集外,成员资格提供程序使用的表中的数据必须与DotNetNuke自己提供的表中的数据自动同步。前面介绍过成员资格提供程序支持众多的数据存储,而且在ASP.NET2.0中,这些数据存储中的数据可以通过一个公用的应用程序配置实用工具管理。如果通过这个实用工具添加了一个用户,那么这个用户没有添加到DotNetNuke自己提供的表中。同样,如果成员资格提供程序使用了诸如LDAP的实现,那么用户将添加到LDAP中,而不是DotNetNuke自己提供的表中。这就是为什么要在两个数据结构之间提供同步服务的原因。因此如果手动添加一个用户,需要是使用DotNetNuke自带的方法,如程序所示。

[c-sharp]  view plain copy print ?
  1. DotNetNuke.Entities.Users.UserController.CreateUser(oUserInfo)  

DotNetNuke4.0完全利用了ASP.NET2.0成员资格提供程序API的实现。应用程序的非典型特性在新的平台发布上构建,DotNetNuke4.0ASP.NET2.0架构上提供了一个经过测试和证明的解决方案。这些特性演示了DotNetNuke安全框架的灵活性和可扩展性。

 



本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/05/20/2297138.html,如需转载请自行联系原作者



目录
相关文章
|
7天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
6天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
323 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
18天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1331 8
|
5天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
17天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1412 87
|
6天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
315 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
5天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
7天前
|
弹性计算 安全 数据安全/隐私保护
2025年阿里云域名备案流程(新手图文详细流程)
本文图文详解阿里云账号注册、服务器租赁、域名购买及备案全流程,涵盖企业实名认证、信息模板创建、域名备案提交与管局审核等关键步骤,助您快速完成网站上线前的准备工作。
255 82
2025年阿里云域名备案流程(新手图文详细流程)