membership如何结合单点登录?

lnwuyaowei 2006-04-11 03:16:11
如题.
...全文
520 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf_1982 2007-01-04
  • 打赏
  • 举报
回复
标记
yjf_1982 2007-01-04
  • 打赏
  • 举报
回复
标记
yinhai_98 2006-12-21
  • 打赏
  • 举报
回复
标记
shamao 2006-04-16
  • 打赏
  • 举报
回复
mark
lnwuyaowei 2006-04-13
  • 打赏
  • 举报
回复
非常感谢net_lover(孟子E章) 的详细解答.
gt5070073 2006-04-12
  • 打赏
  • 举报
回复
学习
海里猿人 2006-04-12
  • 打赏
  • 举报
回复
收藏
yingcongshaw 2006-04-12
  • 打赏
  • 举报
回复
net_lover:应用单件模式(Singleton Pattern)也可以不?
shine_88 2006-04-11
  • 打赏
  • 举报
回复
学习。。。
孟子E章 2006-04-11
  • 打赏
  • 举报
回复
How do I implement single sign on using forms authentication?
Answer:
If you need a single sign on to work across multiple applications located in separate virtual directories, you need to share a common authentication ticket which can be decrypted and integrity checked by every application.

For this you must manually generate validationKey and decryptionKey values and set these values on the <machineKey> element in the machine level Web.config file. Additionally you must ensure that the name and path attributes in the <forms> element is same for each application.

To generate cryptographically random keys, use the RNGCryptoServiceProvider class to generate a cryptographically strong random number. The key must be a minimum of 40 hexadecimal characters (20 bytes) and a maximum of 256 hexadecimal characters (64 bytes) long.

using System;
using System.Text;
using System.Security;
using System.Security.Cryptography;
class App
{
static void Main(string[] argv)
{
int len = 128;
if (argv.Length > 0)
len = int.Parse(argv[0]);
byte[] buff = new byte[len/2];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(buff);
StringBuilder sb = new StringBuilder(len);
for (int i=0; i<buff.Length; i++)
sb.Append(string.Format("{0:X2}", buff[i]));
Console.WriteLine(sb);
}
}



Use the generated keys to configure machineKey settings in your Web.config file as follows. Use separate keys for validationKey and decryptpionKey.

<machineKey validationKey="Hsbfb636576sahfj\mfhhshnj234235"
decryptionKey="shakh7857jkjjco985\fhhegf476343"
validation="SHA1" decryption="Auto" />

孟子E章 2006-04-11
  • 打赏
  • 举报
回复
http://bbs.hidotnet.com/22656/ShowPost.aspx

ywj41 2006-04-11
  • 打赏
  • 举报
回复
学习 努力
孟子E章 2006-04-11
  • 打赏
  • 举报
回复
enableCrossAppRedirects="[true|false]"
属性也允许多站点登录
孟子E章 2006-04-11
  • 打赏
  • 举报
回复
net2.0里已经内建了单一登录的功能,在web.config里配置

<forms
name="name"
loginUrl="URL"
defaultUrl="URL"
protection="[All|None|Encryption|Validation]"
timeout="[HH:MM:SS]"
path="path"
requireSSL="[true|false]"
slidingExpiration="[true|false]">
enableCrossAppRedirects="[true|false]"
cookieless="[UseUri|UseCookie|AutoDetect|UseDeviceProfile]"
domain="domain name">
<credentials>...</credentials>
</forms>

domain属性设置为相同即可


kingtsui 2006-04-11
  • 打赏
  • 举报
回复
用同一个登录页面,然后所有的Web Applications里web.config的machineKey元素需要手动指定密钥值,而不是autoGenerate
这样的方式只要session state保存在stateServer和SQL Server中,就可以在web garden和web farms中都实现单点登录
xcz1943 2006-04-11
  • 打赏
  • 举报
回复
luojianfeng(赚钱娶个漂亮媳妇)
你说的是孟老大里面的
lz说的是.net2.0当中的
nimeide1234567890 2006-04-11
  • 打赏
  • 举报
回复
由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。

实现思路

利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。

查看示例

SingleLogin.aspx代码

<%@ Page language="c#" Codebehind="SingleLogin.aspx.cs" AutoEventWireup="false"
Inherits="eMeng.Exam.SingleLogin" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>单点登录测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="Author" content="孟子E章">
<meta http-equiv="WebSite" content="http://dotnet.aspx.cc/">
<style>
H3 { FONT: 17px 宋体 }
INPUT { FONT: 12px 宋体 }
SPAN { FONT: 12px 宋体 }
P { FONT: 12px 宋体 }
H4 { FONT: 12px 宋体 }
</style>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" runat="server">
<div align="center">
<h3>单点登录测试</h3>
<p>用户名称:<asp:TextBox id="UserName" runat="server"></asp:TextBox></p>
<p>用户密码:<asp:TextBox id="PassWord" runat="server" TextMode="Password"></asp:TextBox></p>
<p><asp:Button id="Login" runat="server" Text=" 登 录 "></asp:Button></p>
<p><asp:Label id="Msg" runat="server"></asp:Label></p>
</div>
</form>
</body>
</HTML>

SingleLogin.aspx.cs代码

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace eMeng.Exam
{
/// <summary>
/// SingleLogin 的摘要说明。
/// 实现单点登录
/// </summary>
public class SingleLogin : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox UserName;
protected System.Web.UI.WebControls.TextBox PassWord;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Button Login;

private void Page_Load(object sender, System.EventArgs e)
{
// 实际例子可访问:
// http://dotnet.aspx.cc/Exam/SingleLogin.aspx
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Login.Click += new System.EventHandler(this.Login_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion

private void Login_Click(object sender, System.EventArgs e)
{
// 作为唯一标识的Key,应该是唯一的,这可根据需要自己设定规则。
// 做为测试,这里用用户名和密码的组合来做标识;也不进行其它的错误检查。

// 生成Key
string sKey = UserName.Text + "_" + PassWord.Text;
// 得到Cache中的给定Key的值
string sUser = Convert.ToString(Cache[sKey]);
// 检查是否存在
if (sUser == null || sUser == String.Empty)
{
// Cache中没有该Key的项目,表名用户没有登录,或者已经登录超时
// 注意下面使用的TimeSpan构造函数重载版本的方法,是进行是否登录判断的关键。
TimeSpan SessTimeOut = new TimeSpan(0,0,System.Web.HttpContext.Current.Session.Timeout,0,0);
HttpContext.Current.Cache.Insert(sKey,sKey,null,DateTime.MaxValue,SessTimeOut,
System.Web.Caching.CacheItemPriority.NotRemovable,null);
Session["User"] = sKey;
// 首次登录,您可以做您想做的工作了。
Msg.Text="<h4 style='color:red'>嗨!欢迎您访问<a href='http://dotnet.aspx.cc/'>【孟宪会之精彩世界】";
Msg.Text += "</a>,祝您浏览愉快!:)</h4>";
}
else
{
// 在 Cache 中发现该用户的记录,表名已经登录过,禁止再次登录
Msg.Text="<h4 style='color:red'>抱歉,您好像已经登录了呀:-(</h4>";
return;
}
}
}
}
nimeide1234567890 2006-04-11
  • 打赏
  • 举报
回复
 Hyperledger (超级账本)是区块链行业中最大的项目之一,它由一组开源工具和多个子项目组成。该项目是由 Linux 基金会主办的一个全球协作项目,其中包括一些不同领域的LEADER们,这些leader的目标是建立一个强大的、业务驱动的区块链框架。 区块链网络主要有三种类型:公共区块链、联盟或联合区块链,以及私有区块链。Hyperledger 是一个区块链框架,旨在帮助公司建立私人或联盟许可的区块链网络,在该网络中,多个组织可以共享控制和操作网络内节点的权限。 因为区块链是一个透明的,基于不可变模式的安全的去中心化系统,所以它被认为是传统的供应链行业改变游戏规则的一种解决方案。它可以通过以下方式支持有效的供应链系统: 跟踪整个区块链中的产品 校验和验证区块链中的产品 在供应链参与者之间共享整个区块链的信息 提供可审核性 本文通过食品供应链的例子来解释 Hyperledger 区块链是如何改变传统供应链系统的。 食品行业供应链 传统供应链效率低下的主要原因是由于缺乏透明度而导致报告不可靠和竞争上的劣势。 在传统的供应链模式中,有关实体的信息对该区块链中的其他人来说并不完全透明,这就导致了不准确的报告和缺乏互操作性问题。电子邮件和印刷文档提供了一些信息,但它们不可能包含完整详细的可见性数据,因为很难在整个供应链中去追踪产品。这也使消费者几乎不可能知道产品的真正价值和来源。 食品行业的供应链环境复杂,多个参与者需要协作将货物运送到最终目的地 —— 客户手中。下图显示了食品供应链(多级)网络中的主要参与者。  典型的食品供应链 该区块链的每个阶段都会引入潜在的安全问题、整合问题和其他低效问题。目前食品供应链中的主要威胁仍然是假冒食品和食品欺诈。 基于 Hyperledger 区块链的食品跟踪系统可实现对食品信息全面的可视性和和可追溯性。更重要的是,它以一种不变但可行的方式来记录产品细节,确保食品信息的真实性。最终用户通过在不可变框架上共享产品的详细信息,可以自我验证产品的真实性。 Hyperledger Fabric Hyperledger Fabric 是 Hyperledger 项目的基石。它是基于许可的区块链,或者更准确地说是一种分布式分类帐技术(DLT),该技术最初由 IBM 公司和 Digital Asset 创建。分布式分类帐技术被设计为具有不同组件的模块化框架(概述如下)。它也是提供可插入的共识模型的一种灵活的解决方案,尽管它目前仅提供基于投票的许可共识(假设今天的 Hyperledger 网络在部分可信赖的环境中运行)。 鉴于此,无需匿名矿工来验证交易,也无需用作激励措施的相关货币。所有的参与者必须经过身份验证才能参与到该区块链进行交易。与以太坊一样,Hyperledger Fabric 支持智能合约,在 Hyperledger 中称为Chaincodes(链码),这些合约描述并执行系统的应用程序逻辑。 然而,与以太坊不同,Hyperledger Fabric 不需要昂贵的挖矿计算来提交交易,因此它有助于构建可以在更短的延迟内进行扩展的区块链。 Hyperledger Fabric 不同于以太坊或比特币这样的区块链,不仅在于它们类型不同,或者说是它与货币无关,而且它们在内部机制方面也不同。以下是典型的 Hyperledger 网络的关键要素: 账本(Ledgers):存储了一系列块,这些块保留了所有状态交易的所有不可变历史记录。 节点(Nodes):区块链的逻辑实体。它有三种类型: 客户端(Clients):是代表用户向网络提交事务的应用程序。 对等体(Peers):是提交交易并维护分类帐状态的实体。 排序者(Orderers) 在客户端和对等体之间创建共享通信渠道,还将区块链交易打包成块发送给遵从的对等体节点。 除了这些要素,Hyperledger Fabric 还有以下关键设计功能: 链码(Chaincode):类似于其它诸如以太坊的网络中的智能合约。它是用一种更高级的语言编写的程序,在针对分类帐当前状态的数据库执行。 通道(Channels):用于在多个网络成员之间共享机密信息的专用通信子网。每笔交易都在一个只有经过身份验证和授权的各方可见的通道上执行。 背书人(Endorsers) 验证交易,调用链码,并将背书的交易结果返回给调用应用程序。 成员服务提供商(Membership Services Providers)(MSP)通过颁发和验证证书来提供身份验证和身份验证过程。MSP 确定信任哪些证书颁发机构(CA)去定义信任域的成员,并确定成员可能扮演的特定角色(成员、管理员等)。 Hyperledger 交易验证流程 首先,客户端通过向基于 Hyperledger Fabric 的应用程序客户端发送请求来启动交易,该客户端将交易提议提交给背书对等体。这些对等体通过执行由交易指定的链码(使用该状态的本地副本)来模拟该交易,并将结果发送回应用程序。此时,应用程序将交易与背书相结合,并将其广播给 排序服务(Ordering Service)。排序服务检查背书并为每个通道创建一个交易块,然后将其广播给通道中的其它节点,对的体验证该交易并进行提交。 Hyperledger Fabric 区块链可以通过透明的、不变的和共享的食品来源数据记录、处理数据,及运输细节等信息将食品供应链中的参与者们连接起来。链码由食品供应链中的授权参与者来调用。所有执行的交易记录都永久保存在分类帐中,所有参与者都可以查看此信息。 Hyperledger Composer 除了 Fabric 或 Iroha 等区块链框架外,Hyperledger 项目还提供了 Composer、Explorer 和 Cello 等工具。 Hyperledger Composer 提供了一个工具集,可帮助你更轻松地构建区块链应用程序。 它包括: CTO,一种建模语言 Playground,一种基于浏览器的开发工具,用于快速测试和部署 命令行界面(CLI)工具 Composer 支持 Hyperledger Fabric 的运行时和基础架构,在内部,Composer 的 API 使用底层 Fabric 的 API。Composer 在 Fabric 上运行,这意味着 Composer 生成的业务网络可以部署到 Hyperledger Fabric 执行。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧