基于Web前端用户调用CSFramework.WebApi服务端登录登出接口实现
作者:作者不详  发布日期:2020/04/02 19:12:17
  基于Web前端用户调用CSFramework.WebApi服务端登录登出接口实现

基于Web前端用户调用CSFramework.WebApi服务端登录登出接口实现


文章简介


Web前端,如Web站点、门户网站、论坛等Web网站调用WebApi业务接口必须使用令牌(Token)进行安全认证。因此用户必须先登录系统,获取令牌(Token),Web前端把令牌作为全局变量缓存起来给调用WebApi接口使用。


下面是CSFramework.WebApi后端框架的GetController控制器实现的登录登出接口:


登录接口 - LoginWeb


C# Code:

//路由参考:http://127.0.0.1:8899/api/gate/loginweb
/// <summary>
/// 用户登录(采用Token方式用户登录,用于Web端)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
[ActionName(
"loginweb")]
public ModelResponse LoginWeb(ModelRequestLogin4Web request)
{
  ModelResponse data
= new ModelResponse();
  
  
try
  {
    
//登录业务逻辑
    
CmdLoginWeb cmd = new CmdLoginWeb(this.Request);
    
    
//检查命令是否接受请求的数据
    
IUserResponse result = cmd.AcceptLogin(request);
    
    
if (result.Code == 0)
    data
= (ModelResponse)cmd.Login(request);
    
else
    data
= new ModelResponse { Code = result.Code, Message = result.Message };
  }
  
catch (ResponseException ex)
  {
    
return ex.Response;
  }
  
catch (Exception ex)
  {
    data
= new ModelResponse();
    data.Code
= ErrorCodes.SystemException;
    data.Message
= String.Format("系统异常:{0}", ex.Message);
  }
  
  
return data;
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761



登出接口 - LogoutWeb


C# Code:


//路由参考:http://127.0.0.1:8899/api/gate/logoutweb
/// <summary>
/// 用户登录(采用Token方式用户登录,用于Web端)
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost]
[ActionName(
"logoutweb")]
public ModelResponse LogoutWeb(ModelRequestToken request)
{
  ModelResponse data
= new ModelResponse();
  
  
try
  {
    
//登录业务逻辑
    
CmdLoginWeb cmd = new CmdLoginWeb(this.Request);
    
    
//检查命令是否接受请求的数据
    
IUserResponse result = cmd.AcceptLogout(request);
    
    
if (result.Code == 0)
    data
= (ModelResponse)cmd.Logout(request);
    
else
    data
= new ModelResponse { Code = result.Code, Message = result.Message };
  }
  
catch (ResponseException ex)
  {
    
return ex.Response;
  }
  
catch (Exception ex)
  {
    data
= new ModelResponse();
    data.Code
= ErrorCodes.SystemException;
    data.Message
= String.Format("系统异常:{0}", ex.Message);
  }
  
  
return data;
}
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761



ModelRequestLogin4Web 类:


Web前端用户登录必须使用ModelRequestLogin4Web类作为调用登录接口的参数。


C# Code:

/// <summary>
/// Web端登录接口模型。Web端不可以使用私钥以及数字签名方式登录或调用业务接口!
/// </summary>
public class ModelRequestLogin4Web
{
  
  
public ModelRequestLogin4Web()
  {
    
this.Timestamp = "";
    
this.Password = "";
    
this.UserID = "";
    
this.ApiKey = "";
  }
  
  
/// <summary>
  
/// 明文传输key,合作方身份发布给开发者
  
/// </summary>
  
[JsonProperty("apikey")]
  
public string ApiKey { get; set; }
  
  
/// <summary>
  
/// 时间戳,格式:yyyyMMddHHmmssfff,最小单位:毫秒
  
/// </summary>
  
[JsonProperty("ts")]
  
public string Timestamp { get; set; }
  
  
/// <summary>
  
/// 用户
  
/// </summary>
  
[JsonProperty("userid")]
  
public string UserID { get; set; }
  
  
/// <summary>
  
/// 密码
  
/// </summary>
  
[JsonProperty("pwd")]
  
public string Password { get; set; }
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761




测试登录(Login)接口


贴图图片-调用CSFramework.WebApi服务端登录登出接口



C# Code:

private void btnWebLogin_Click(object sender, EventArgs e)
{
  
string url1 = "http://localhost:19893/api/gate/loginweb";
  
  ModelRequestLogin4Web requestToken
= new ModelRequestLogin4Web
  {
    ApiKey
= PrivateData.apikey,
    UserID
= "1388888888",
    Password
= "cf79ae6addba60ad018347359bd144d2",
    Timestamp
= DateTime.Now.ToString("yyyyMMddHHmmssfff"),
    };
    
    
string json2 = JsonConvert.SerializeObject(requestToken);
    
    
string result3 = WebApiTools.Post(url1, json2);
    ModelResponse response1
= JsonConvert.DeserializeObject<ModelResponse>(result3);
    
if (response1.DataIsEncrypted)
    {
      response1.Data
= System.Web.HttpUtility.UrlDecode(response1.Data);
      response1.Data
= CryptoHelper.DESDecrypt(response1.Data, PrivateData.DES_Key, PrivateData.DES_iv);
    }
    
    _User
= JsonConvert.DeserializeObject<ModelUser>(response1.Data);
    
    txtResponse.Text
= response1.Data;
  }
  
  
//来源:C/S框架网 | www.csframework.com | QQ:23404761



登录接口返回的JSON数据,包含Token令牌数据。


JSON Code:

{
"Account":"8888888888",
"Token":"D047839F-E36F-47BA-B110-815302E0A2F6",
"TS":"2020-04-02 18:55",
"UserName":"测试用户",
"UserType":1,
"Phone":"1388888888",
"Status":1,
"Version":""
}

//来源:C/S框架网 | www.csframework.com | QQ:23404761



测试登出(Logout)接口


贴图图片-调用CSFramework.WebApi服务端登录登出接口1



C# Code:

private ModelUser _User = null;

private void btnWebLogout_Click(object sender, EventArgs e)
{
  
if (_User == null)
  {
    MessageBox.Show(
"请先模拟Web端登录!");
    
return;
  }
  
  
string url1 = "http://localhost:19893/api/gate/logoutweb";
  
  ModelRequestToken requestToken
= new ModelRequestToken
  {
    Timestamp
= DateTime.Now.ToString("yyyyMMddHHmmssfff"),
    UserID
= _User.Account,
    Token
= _User.Token,//第1次登录的token
    
};
    
    
string json2 = JsonConvert.SerializeObject(requestToken);
    
    
string result3 = WebApiTools.Post(url1, json2);
    ModelResponse response3
= JsonConvert.DeserializeObject<ModelResponse>(result3);
    
    txtResponse.Text
= result3;
  }
  
  
//来源:C/S框架网 | www.csframework.com | QQ:23404761



参考文章:


CSFramework.WebApi后端服务器框架:客户端调用WebApi接口方式(签名+Token令牌)



CSFramework.WebApi后端框架Token令牌工作机制以及Token刷新原理





ASP.NET WebApi快速开发框架|APP后端框架-标准版V1.0

适用开发 适用开发:快速搭建APP、B/S、C/S、微信小程序、公众号、Web站点等后端应用服务程序。
运行平台 运行平台:Windows + .NET Framework 4.5
开发工具 开发工具:Visual Studio 2015+,C#语言
数据库 数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql)


ASP.NET WebApi快速开发框架|MVC框架|APP微信小程序后端框架|服务端框架-标准版V1.0





C/S框架网|原创精神.创造价值.打造精品

扫一扫加微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务

上一篇 下一篇