您的位置:首页 > 大数据 > 人工智能

跨站登录(一站式登录)认证的解决办法 (转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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐