使用asp.net实现单点登陆(SSO)功能

单点登陆技术广泛应用于把分布在不同服务器的各个网站之间的身份识别及授权认证联系起来,解决用户重复登陆的操作问题。

假设有四个网站,如下图所示:

主站:用于产生验证用户授权凭证的服务器 http://www.mainsite.com
分站:http://www.subsite1.com、http://www.subsite2.com、http://www.subsite3.com
凭证: 用户在mainsite登陆后将产生的有效授权数据标识,标识可以存放在主站的数据库。
令牌:由mainsite.com产生并颁发给个子站的唯一标识。

单点登陆的实现过程

1、假设匿名用户访问子站(如:http://www.subsite1.com/products.html)上的一个授权页面,系统会先跳转到 主站http://www.mainsite.com/login.html,用户登陆后,系统产生登陆认证后的令牌,然后自动把令牌带回登陆之前的子 站,此时子站会根据用户由主站带回来的令牌信息进行认证,认证成功后把认证信息以一定的时效性保存在子站或Cookie。

2、假设用户已经在subsite1.com登陆了,但他要去访问另一个子站(如:subsite2.com),由于用户已经在 subsite1.com获得了登陆授权,因此subsite1.com将自动向mainsite.com发送受权认证,认证成功 后,subsite2.com会保留用户的凭证。

类设计如下:

1、通行证实体类:

public class Passport
{
    public string Account { get; set; }
    public string Password { get; set; }
    public Passport(string account, string password)
    {
        this.Account = account;
        this.Password = password;
    }
}

2、 通行证业务类:

/// <summary>
/// SSOHelper
/// </summary>
public class SSOHelper
{
    /// <summary>
    /// 登陆,登陆成功后将产生令牌
    /// </summary>
    /// <param name="passport">通行证对象</param>
    /// <param name="token">令牌</param>
    /// <returns>返回登陆结果</returns>
    public int Login(Passport passport, out string token)
    {
        token = null;
        //  业务逻辑
        return default(int);
    }
    public SSOHelper()
    {    }
}

3、登陆认证示例:

假设用户由http://www.subsite1.com/products.html申请登陆,那么系统将跳转到www.mainsite.com的登陆认证页面,用户输入通行证信息并成功认证后,系统将产生令牌,然后自动引导用户返回认证之前的页面。

private void Login() // 主站登陆
{
    Passport passport = new Passport("tom", "abc123");
    string taken = string.Empty;
    int iResult = new SSOHelper().Login(passport, out taken);
    if (0 == iResult) // 主站认证通过
    {
        // 注:taken务必做加密处理
        Response.Redirect(string.Format("http://www.subsite1.com/products.html?t=", taken));
    }
}

private void CertificateAuthority() //  子站身份验证
{
    string taken = Request.QueryString["t"];
    if (null != taken && 0 != taken.Length)
    {
        // 解密taken,唯一标识已经存在于数据库
    }
}

4、注销登陆

清空各个站点的登陆信息即可。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值