当前位置:编程学习 > C#/ASP.NET >>

WebService 实现BS、CS单点登录。

WebService  实现BS、CS单点登录。
具体思路,实现步骤,有源码更好。
希望大家帮助一下。 --------------------编程问答-------------------- 这样的解决方案和代码网上很多。
http://blog.csdn.net/saroot/article/details/2532514
--------------------编程问答-------------------- 上面的例子不错啊 --------------------编程问答-------------------- 上面的代码应该完成不了先登录BS --------------------编程问答-------------------- 打算给楼主的例子还没1楼的全面,1楼的soap方式写的挺好 --------------------编程问答-------------------- 楼主要贴出来?  好吧,给楼主贴出来
<%@ WebService Language="C#" CodeBehind="~/App_Code/sso.cs" Class="sso" %>
ssoWebMethod/web.config
<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="ClientIPZone" value="201.224.133.123" />
  </appSettings>
 <connectionStrings>
  <add name="ssoDatabase" connectionString="server=222.222.222.222;database=db_sso;uid=sso2;pwd=sz22223121;" providerName="System.Data.SqlClient"/>
 </connectionStrings>
 <system.web>
  <compilation debug="true"/>
  <authentication mode="Windows"/>
    <customErrors mode="Off"></customErrors>
 </system.web>
</configuration>
 
 
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Configuration;
using System.Xml;
using System.IO;
/// <summary>
/// SSO系统
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class sso : System.Web.Services.WebService
{
    public sso()
    {
    }
    [WebMethod]
    public String GetLoginByToken(String Token)
    {
        //根据Token读取对应的原业务系统的登录用户名与密码,并加密返回
        String result = "noneLogin";
 
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
 
            String sql;
            sql = "SELECT AppsUsers.AppLoginId ";
            sql += "FROM AppToken ";
            sql += "INNER JOIN AppsUsers ";
            sql += "ON AppToken.AppId = AppsUsers.AppId AND AppToken.ssoUserId = AppsUsers.ssoUserId ";
            sql += "WHERE AppToken.Token = @Token";
 
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@Token", Token));
 
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                //result = "LoginId=" + dr["AppLoginId"].ToString().Trim() + ";LoginPwd=" + dr["AppPassword"].ToString().Trim();
                result = dr["AppLoginId"].ToString().Trim();
            }
            dr.Dispose();
            cmd.Dispose();
        }
 
        return result;
    }
 
    [WebMethod]
    public Boolean TokenLost(String Token)
    {
        Boolean result = false;
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
 
            String sql = "DELETE FROM AppToken WHERE Token = @Token";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@Token", Token));
 
            Int32 line = cmd.ExecuteNonQuery();
            if (line == 1)
            {
                result = true;
            }
            cmd.Dispose();
        }
        return result;
    }

    [WebMethod]
    public String SSOActive(String AppId, String ssoUserId, String LoginId)
    {

        Int32 result = m_CheckAppsUsers(AppId, LoginId);
        if (result == -1)
        {
            return "Web Service执行错误,请联络技术支持.";
        }
        else if (result == 1)
        {
            return "该帐户已经是单点登录帐户,不用再次激活.";
        }
        Boolean active = m_InsertAppsUsers(AppId, Convert.ToInt32(ssoUserId), LoginId);
        if (!active)
        {
            return "帐号激活失败,请联络技术支持.";
        }
        return "单点登录已激活";
    }

    [WebMethod]
    public XmlNode GetSSOUsers()
    {
        DataTable dt = m_GetSSOUsers();
        String xmlstr = m_GetXmlStrFromDataTable(dt);
 
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xmlstr);
 
        dt.Dispose();
        return doc;
    }

    [WebMethod]
    public Boolean CheckIP(String ClientIP)
    {
        //判断IP是否为本局IP,否则不能激活
        if (ClientIP.IndexOf(ClientIPZone) == -1)
        {
            return false;
        }
        return true;
    }

    private Int32 m_CheckAppsUsers(String AppId, String AppLoginId)
    {
        Int32 result = -1;
        using (SqlConnection conn = new SqlConnection(ConnectionString))
        {
            conn.Open();
 
            String sql;
            sql = "SELECT * FROM AppsUsers ";
            sql += "WHERE AppId = @AppId AND AppLoginId = @AppLoginId";
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add(new SqlParameter("@AppId", AppId));
            cmd.Parameters.Add(new SqlParameter("@AppLoginId", AppLoginId));
 
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.Read())
            {
                result = 1;
            }
            else
            {
                result = 0;
            }
            dr.Dispose();
            cmd.Dispose();
        }
        return result;
    }

    private Boolean m_InsertAppsUsers(String AppId, Int32 ssoUserId, String AppLoginId)
    {
        Boolean result = false;
        SqlConnection conn = null;
        SqlTransaction trans = null;
        try
        {
            conn = new SqlConnection(ConnectionString);
            conn.Open();
 
            trans = conn.BeginTransaction();
            SqlCommand cmd = new SqlCommand();
 
            cmd.Transaction = trans;
            cmd.Connection = conn;
            cmd.CommandType = CommandType.Text;
 

            String sql;
            sql = "INSERT INTO AppsUsers(AppId, ssoUserId, AppLoginId) ";
            sql += "VALUES(@AppId, @ssoUserId, @AppLoginId)";
 
            cmd.CommandText = sql;
 
            cmd.Parameters.Add(new SqlParameter("@AppId", AppId));
            cmd.Parameters.Add(new SqlParameter("@ssoUserId", ssoUserId));
            cmd.Parameters.Add(new SqlParameter("@AppLoginId", AppLoginId));
 
            cmd.ExecuteNonQuery();
 

            
            trans.Commit();
 
            cmd.Dispose();
 
            result = true;
        }
        catch
        {
            try
            {
                trans.Rollback();
            }
            catch (SqlException ex)
            {
                throw new Exception(ex.Message);
            }
            throw;
        }
        finally
        {
            if (conn != null)
                conn.Dispose();
            if (trans != null)
                trans.Dispose();
        }
        return result;
    }

    private DataTable m_GetSSOUsers()
    {
        DataTable dt = new DataTable();
        SqlConnection conn = null;
        try
        {
            conn = new SqlConnection(ConnectionString);
            conn.Open();
 
            String sql = "SELECT * FROM ssoUsers ORDER BY ssoUserName ASC FOR XML AUTO";
            SqlDataAdapter da = new SqlDataAdapter(sql, conn);
            da.Fill(dt);
            da.Dispose();
        }
        catch
        {
            throw;
        }
        finally
        {
            if (conn != null)
                conn.Close();
        }
        return dt;
    }
 
    public static string m_GetXmlStrFromDataTable(DataTable dt)
    {
        String Result = "";
 
        foreach (DataRow row in dt.Rows)
        {
            Result += row[0].ToString();
        }
        Result = "<ssoUsers>" + Result + "</ssoUsers>";
        return Result;
    }
 

    private readonly String ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ssoDatabase"].ConnectionString;
 

    private readonly String ClientIPZone = System.Configuration.ConfigurationManager.AppSettings["ClientIPZone"];
 
}
补充:.NET技术 ,  Web Services
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,