HTML5技术

干货来袭-整套完整安全的API接口解决方案 - hubro(2)

字号+ 作者:H5之家 来源:H5之家 2017-01-05 17:00 我要评论( )

登录 [HttpPost][AnonymousSign] public DealResult Login([FromBody] Login parame){ ){ );} string key2 = System.Guid.NewGuid().ToString(); string voucher = System.Guid.NewGuid().ToString(); var user = n

登录 [HttpPost] [AnonymousSign] public DealResult Login([FromBody] Login parame) { ) { ); } string key2 = System.Guid.NewGuid().ToString(); string voucher = System.Guid.NewGuid().ToString(); var user = new User() { Name = parame.Name, Id = 1, Key = key2, Voucher = voucher }; var timeDiff = (DateTime.Now - Convert.ToDateTime(parame.Time)).TotalSeconds;//保存客户端和服务端时间差 LoginStatusContext.SetLoginStatus(voucher, user.Id, key2, timeDiff); CoreHelper.CookieHelper.AddCookies(, voucher);DealResult(true, "", user); }

View Code

这里可以看到,创建了两个GUID,一个为用户凭证,一个为用户密钥,放入用户信息返回,同时调用LoginStatusContext.SetLoginStatus保存登录信息

同时使用了AnonymousSign标注,此方法使用默认签名Setting.DefaultKey

定义获取用信息方法

基本信息 [HttpGet] public DealResult GetBasicInfo(string name) { var user = new User() { Name = name, Id = CurrentUserId }; return DealResult(true, string.Empty, user); }

View Code

 

示例控制器完整定义

帐号操作 /// </summary> [SignCheckAttribute] public class AccountController : BaseController { 登录 [HttpPost] [AnonymousSign] public DealResult Login([FromBody] Login parame) { ) { ); } string key2 = System.Guid.NewGuid().ToString(); string voucher = System.Guid.NewGuid().ToString(); var user = new User() { Name = parame.Name, Id = 1, Key = key2, Voucher = voucher }; var timeDiff = (DateTime.Now - Convert.ToDateTime(parame.Time)).TotalSeconds;//保存客户端和服务端时间差 LoginStatusContext.SetLoginStatus(voucher, user.Id, key2, timeDiff); CoreHelper.CookieHelper.AddCookies(, voucher);DealResult(true, "", user); } 基本信息 [HttpGet] public DealResult GetBasicInfo(string name) { var user = new User() { Name = name, Id = CurrentUserId }; return DealResult(true, string.Empty, user); } 测试异常 [HttpGet] public DealResult TestException() { int a = 0; var b = 10 / a; return DealResult(true); } }

View Code

 

此控制器标注了SignCheckAttribute用以进行签名判断

具体实现可看SignCheckAttribute代码

SignCheckAttribute里实现了有

为了统一处理异常,配置了异常处理

GlobalConfiguration.Configuration.Filters.Add(new ExceptionAttribute());

对接口进行测试

大杀器来了,配合此方案放出了对应的测试工具,虽然WEB API有个扩展,但没法对此方案测试

使用此工具能方便按方案要求调用接口,为了方便参数拼接,POST和GET都采用URL参数的形式输入

测试登录/api/account/login

测试获取信息/api/account/GetBasicInfo

测试异常处理/api/account/TestException

在未登录情况下调用获取信息

接口文档

接口结构文档一直是很让人头疼的事,手写更改了又得维护,版本不一样还麻烦,自动生成最好了,同样WEB API 带扩展没法表示此结构详细

大杀器2号来了,按代码注释动态生成接口文档,文档格式与控制器保持一致

Home控制器代码实现

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【干货分享】通用工具类 - Orson

    【干货分享】通用工具类 - Orson

    2016-12-23 13:00

  • 随便记的一些有趣的干货的地址 - 伍三思

    随便记的一些有趣的干货的地址 - 伍三思

    2016-10-25 12:00

  • 【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法 - 我是小茗同学

    【干货】JS版汉字与拼音互转终极方案,附简单的JS拼音输入法 - 我是

    2016-10-19 18:00

  • 【绝对干货】仿微信QQ设置图形头像裁剪,让你的App从此炫起来~ - 南尘

    【绝对干货】仿微信QQ设置图形头像裁剪,让你的App从此炫起来~ - 南

    2016-10-17 10:00

网友点评
a