RESTful架构中的webapi

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RESTful架构中的webapi相关的知识,希望对你有一定的参考价值。

参考技术A 通过webAPI在server端开发一个借口,在client端调用此借口的完整过程。

(VS2010版本如果包括MVC4也可以创建webAPI,或者vs2012及以上版本)

运行环境:VS2017

开发语言:c#

一、server端

1.创建webapi项目,打开vs2017-文件-新建-项目。

2.在项目中添加Controllers和Models两个文件夹,分别用于存放控制器类和实体类。

在Controllers文件夹中添加API控制器类。

控制类添加完成后,会自动生成,GET,POST,PUT,DELETE四个方法。

通过地址确定方法:

get方式:http://IP地址:端口号/api/控制器名称

post方式:[HttpGet("方法标识名称")] http://IP地址:端口号/api/控制器名称/方法标识名称

添加一个方法,在方法中描述接口需要完成的操作以及返回值。

需要注意事项:

1)传进来参数的数据类型必须与接收的数据类型相同。

二、client端

1.添加控制台应用程序用来测试调用接口是否成功。

2.定义一个方法用来调用接口并返回数据。

3.定义一个restful接口帮助类。

使用 WebAPI 进行 RESTFul 身份验证

【中文标题】使用 WebAPI 进行 RESTFul 身份验证【英文标题】:RESTFul Authentication with WebAPI 【发布时间】:2013-03-25 22:07:53 【问题描述】:

我有一个使用 WebAPI 构建的 Web 服务,它接受 JSON 请求并做出相应的响应。核心架构已构建,但没有任何身份验证/授权。

经过大量谷歌搜索和浏览示例项目后,我不知道从哪里开始。我发现了 2008 年和 2009 年的大量材料,但没有找到很多 WebAPI/单页应用程序的最新指南/工作流程。我认为工作流程应该如下:

    检查用户是否已登录:如何使用 javascript 来完成?我是否将 cookie 发送到我的 webAPI?如果是这样,我是否将该 cookie 作为请求正文中的参数发送?

    让用户登录/注册:这些数据是如何加密/解密的?当然,我不能通过网络发送密码……这就是 SSL 的用武之地吗?

    让他们可以访问他们有权访问的内容:我想我明白了 - 我可以根据每个请求在控制器中进行授权。

任何信息都会很棒。

【问题讨论】:

最近刚出版了一本关于这方面的好书:amazon.com/Pro-ASP-NET-Web-API-Security/dp/1430257822/… 已订购!谢谢埃文 【参考方案1】:

基本上,您需要基于令牌的身份验证或授权。 如果您指的是 ASP.NET WebAPI,以下项目将是一个很好的起点: http://thinktecture.github.com/Thinktecture.IdentityModel.45/

即使您不使用 ASP.NET WebAPI,以下视频也很好地介绍了如何在 RESTful Web 服务上提供身份验证/授权: http://vimeo.com/43603474

回答您的一些问题:

检查用户是否已登录:如何使用 javascript 完成此操作?我是否将 cookie 发送到我的 webAPI?如果是这样,我是否将该 cookie 作为请求正文中的参数发送?

您可以使用 cookie,但我通常使用标头来避免常见的 XSRF 攻击。每当从浏览器发送 http 请求时,都会自动包含 Cookie。

这就是 SSL 的用武之地吗?

是的。如果您打算继续使用基于令牌的方法,您可以使用单独的服务器(身份服务器)为您进行身份验证。

【讨论】:

或者他可以只使用表单身份验证。基于令牌的身份验证可能是矫枉过正 @EvanLarsen Forms 身份验证基于令牌的。 Woudl 使用移动设备形成身份验证工作 - 即 - android/iphone/ipad? 如果您将使用平台中可用的任何 http 客户端库。在android中,你应该可以使用HttpUrlConnection。 setRequestProperty() 会特别有趣。【参考方案2】:

JavaScript 客户端是独一无二的。您是否在同一个域中拥有 Web API 和提供 JavaScript 的页面?如果不是,则您有同源策略限制。如果您拥有托管网页和 Web API 的相同 Web 应用程序,则可以使用表单 Authn。在这种情况下,您不需要自己从 JavaScript 发送包含身份验证票的 cookie。浏览器会为您执行此操作,这就是 XSRF 问题的原因。您必须小心 JavaScript 发送最终用户不应该知道的凭据。如果 JavaScript 知道一些东西,任何聪明的最终用户都可以得到这些知识。 OAuth 2.0 隐式授权可能是一个不错的选择。最终用户在颁发访问令牌的授权服务器中输入凭据(密码)。 JavaScript 获取令牌并将其呈现给 Web API,但它永远无法访问凭据。

【讨论】:

谢谢巴德里。 JS 客户端位于不同的域中 - 客户端和 API 是分离的。也就是说,您对基本身份验证 + SSL 有何看法? JavaScript 客户端(浏览器)+ Basic Authn 即使通过 SSL 也容易受到 XSRF 的影响。您可以使用 Thinktecture 身份服务器之类的东西通过 OAuth 2.0 隐式授权发布令牌。 JavaScript 客户端可以通过这种方式请求访问令牌,并以承载方案将其呈现给 Web API。那将是我的第一选择。您可以使用 Basic Authn,但是您必须使所有对您的 API 的 GET 请求无效,并且可能以某种方式保护其他方法,例如他们如何为 MVC 实现防伪令牌。我的书涵盖了这个选项。 非常感谢您的快速回复。你的书刚刚送到我家门口 - 我期待着深入研究它。

以上是关于RESTful架构中的webapi的主要内容,如果未能解决你的问题,请参考以下文章

Django中的RESTful

对 Restful 架构进行分组

SpringMVC实现Restful架构

RESTful接口

restful接口风格

RESTful详解