跨站登录(一站式登录)认证的解决办法 (转http://apps.hi.baidu.com/share/detail/20230305)
2011-02-15 16:46
531 查看
关键在于web.config,如下面所示,粗体标识的地方,多个网站的web.config设置一定要相同,这样才能保证在一个站点上登录后,另一个站点继续获取认证信息,当然validationKey的值可自行定义,但要符合规范(可以借助public/password.aspx工具来生成)
*********web.config************************************************************
<?xml version="1.0" encoding="gb2312"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="connStr" connectionString="Data Source=.;Initial Catalog=CF_BXG;Persist Security Info=True;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
</connectionStrings>
<!--公用目录,存放一些允许匿名访问的页面-->
<location path="public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<!--管理目录,只允许admin用户访问-->
<location path="manage">
<system.web>
<authorization>
<allow users="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<compilation debug="true"/>
<machineKey validationKey="194FDCE5A54F78BFBBE2AE0FD530964DE78C637E" decryptionKey="C2133129402B71F3" validation="SHA1"/>
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".ASPXAUTH"></forms>
</authentication>
<authorization>
<deny users = "?"/>
</authorization>
<pages validateRequest="false"/>
</system.web>
</configuration>
*******password.aspx*************************************************************************
protected void Page_Load(object sender, EventArgs e)
{
}
///<summary>
///生成加密型强随机Key值
///</summary>
///<paramname="i">Key的有效长度:
///decryptionKey的有效值为8或24;
///validationKay的有效值为20至64
///</param>
private string CreateKeyString(int i)
{
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();//加密随机数生成器
byte[]bt=new byte[i];
rng.GetBytes(bt);//用加密型强随机值序列填充字节数组
System.Text.StringBuilder str=new System.Text.StringBuilder();
for(int j=0;j<i;j++){
str.Append(string.Format("{0:X2}",bt[j]));//转换成大写的十六进制文本
}
return str.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
string decStr = this.CreateKeyString(int.Parse(this.TextBox1.Text));
string valStr = this.CreateKeyString(int.Parse(this.TextBox2.Text));
this.TextBox3.Text = string.Format("<machineKey validationKey=/"{0}/" decryptionKey=/"{1}/" validation=/"SHA1/"/>", valStr, decStr);
}
---------------------------------------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Password.aspx.cs" Inherits="Public_Password" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" Width="35px">8</asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server" Width="36px">20</asp:TextBox><br />
<asp:TextBox ID="TextBox3" runat="server" Width="616px"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" onClick="Button1_Click" Text="生成随机密码串" /></div>
</form>
</body>
</html>
测试方法:
将附件中的文件解压开
在IIS中新建一个站点FormTest1 对应目录为FormTest1,端口为90
在IIS中再建一个站点FormTest2 对应目录为FormTest2,端口为99
测试步骤:
1单独输入http://localhost:90/default.aspx 肯定会转到http://localhost:90/login.aspx要求登录
2单独输入http://localhost:99/default.aspx 同样会转到http://localhost:99/login.aspx要求登录
说明基本的form认证起作用了
接下来,http://localhost:90/login.aspx中输入admin/123456,登录成功后,会自动跳转到http://localhost:90/default.aspx
这里直接在地址栏里,输入http://localhost:99/default.aspx可正常访问(但http://localhost:99上并没有登录),即在90端口站点上登录后,99端口站点上已经不需要再登录了,即实现了跨站登录(一站式登录)
该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=16664
*********web.config************************************************************
<?xml version="1.0" encoding="gb2312"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="connStr" connectionString="Data Source=.;Initial Catalog=CF_BXG;Persist Security Info=True;User ID=sa;Password=123456"
providerName="System.Data.SqlClient" />
</connectionStrings>
<!--公用目录,存放一些允许匿名访问的页面-->
<location path="public">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
<!--管理目录,只允许admin用户访问-->
<location path="manage">
<system.web>
<authorization>
<allow users="admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<system.web>
<compilation debug="true"/>
<machineKey validationKey="194FDCE5A54F78BFBBE2AE0FD530964DE78C637E" decryptionKey="C2133129402B71F3" validation="SHA1"/>
<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".ASPXAUTH"></forms>
</authentication>
<authorization>
<deny users = "?"/>
</authorization>
<pages validateRequest="false"/>
</system.web>
</configuration>
*******password.aspx*************************************************************************
protected void Page_Load(object sender, EventArgs e)
{
}
///<summary>
///生成加密型强随机Key值
///</summary>
///<paramname="i">Key的有效长度:
///decryptionKey的有效值为8或24;
///validationKay的有效值为20至64
///</param>
private string CreateKeyString(int i)
{
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();//加密随机数生成器
byte[]bt=new byte[i];
rng.GetBytes(bt);//用加密型强随机值序列填充字节数组
System.Text.StringBuilder str=new System.Text.StringBuilder();
for(int j=0;j<i;j++){
str.Append(string.Format("{0:X2}",bt[j]));//转换成大写的十六进制文本
}
return str.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
string decStr = this.CreateKeyString(int.Parse(this.TextBox1.Text));
string valStr = this.CreateKeyString(int.Parse(this.TextBox2.Text));
this.TextBox3.Text = string.Format("<machineKey validationKey=/"{0}/" decryptionKey=/"{1}/" validation=/"SHA1/"/>", valStr, decStr);
}
---------------------------------------------------------------
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Password.aspx.cs" Inherits="Public_Password" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" Width="35px">8</asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server" Width="36px">20</asp:TextBox><br />
<asp:TextBox ID="TextBox3" runat="server" Width="616px"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" onClick="Button1_Click" Text="生成随机密码串" /></div>
</form>
</body>
</html>
测试方法:
将附件中的文件解压开
在IIS中新建一个站点FormTest1 对应目录为FormTest1,端口为90
在IIS中再建一个站点FormTest2 对应目录为FormTest2,端口为99
测试步骤:
1单独输入http://localhost:90/default.aspx 肯定会转到http://localhost:90/login.aspx要求登录
2单独输入http://localhost:99/default.aspx 同样会转到http://localhost:99/login.aspx要求登录
说明基本的form认证起作用了
接下来,http://localhost:90/login.aspx中输入admin/123456,登录成功后,会自动跳转到http://localhost:90/default.aspx
这里直接在地址栏里,输入http://localhost:99/default.aspx可正常访问(但http://localhost:99上并没有登录),即在90端口站点上登录后,99端口站点上已经不需要再登录了,即实现了跨站登录(一站式登录)
该文章转载自德仔工作室:http://www.dezai.cn/Article_Show.asp?ArticleID=16664
相关文章推荐
- http://apps.hi.baidu.com/share/detail/18571966
- Eclipse不提示的解决办法 转自:http://hi.baidu.com/zsjzsj_2009/blog/item/361cf2f50a4996e47709d7d4.html
- VisualStudio 2010 SP1安装时提示计算机环境导致无法安装的解决办法 (非常感谢 http://hi.baidu.com/imtoby)
- 先装LINUX后装WINDOWS的解决办法----http://hi.baidu.com/faultless/blog/item/5881e8f829fe100fd8f9fd1c.html
- linux下出现ping:unknown host www.baidu.com问题时的解决办法——ubuntu下局域网络的配置
- http://hi.baidu.com/ch ... 35827.html%23
- linux下出现ping:unknown host www.baidu.com问题时的解决办法
- 我的百度空间http://hi.baidu.com/sunyaming
- 垂直搜索,互联网的下一个泡沫(转载自:http://hi.baidu.com/xiejl/blog)
- 关于android开发时,发生Error infalting classa com.baidu.mapapi.map.MapView的解决办法
- Ping:unknown host www.baidu.com!的解决办法
- http://pan.baidu.com/share/link?shareid=1668339228&uk=3241661244
- 我的博客在百度:http://hi.baidu.com/sunmoonzhangli
- 构建高效软件开发流程和团队 http://www.5apower.com/web/ShareDetail/ShareDetail.aspx?TaskID=1414
- Sharepoint client model 中出现Cannot invoke HTTP DAV request. There is a pending query 的解决办法
- 关于windows的系统文件保护。转载:http://hi.baidu.com/w1n_r00tkit/blog/item/b4354900691aa2067aec2c6f.html
- 更新SDK失败解决办法(Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml)
- oracle 登录 http://localhost:5560/isqlplus/login.uix 任意账号无法登陆的解决办法
- spring配置详解-加载资源文件(转http://hi.baidu.com/pj19830204/blog/item/e27cdc511f020a2f43a75bd5.html)
- C# 静态构造函数详解(转自:http://hi.baidu.com/jiang_yy_jiang/blog/item/07d5cbe9ff6b4d32b90e2d5a.html)