基于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
/// <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
//路由参考: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
/// 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)接口
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
{
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
"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)接口
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
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)
运行平台:Windows + .NET Framework 4.5
开发工具:Visual Studio 2015+,C#语言
数据库:Microsoft SQLServer 2008R2+(支持多数据库:Oracle/MySql)
扫一扫加微信
版权声明:本文为开发框架文库发布内容,转载请附上原文出处连接
NewDoc C/S框架网