跨站登录(一站式登录)认证的解决办法 (转http://apps.hi.baidu.com/share/detail/20230305)

关键在于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值