除非开启了SharePoint网站的匿名访问,否则对于入站的请求,必须要有一个身份验证的过程(Authentication),这个很重要。

SharePoint身份验证依赖于目录服务(如AD、identity providers(IdPs)像Google和Facebook),服务(如IIS、Azure Access Contro Service(ACS),以及Active Directory Services(ADFS)来实现它的身份验证业务逻辑。

基于编程模型的改变,SharePoint 2013需要处理两种类型的认证:用户认证和APP认证。对于用户认证,SharePoint使用安全组和存储在内容数据库中的Access Control List(ACL)来跟踪,但是对于APP,SharePoint使用了另一种方式。APP的认证通过ACS来提供给SharePoint,叫做OAuth(OAuth 2.0是OAuth的下一个版本,需要HTTPS)。这种架构使得用户可以授权APP去代表他们工作而不需要保存他们的凭据信息。

当SharePoint收到一个入站请求时,会检查请求中是否包含标识用户身份的登录令牌,如果找到该令牌,SharePoint就假定该请求是由通过验证的用户发出的而不是APP。然后SharePoint会检查请求的目标URL指向的是一个标准的网站还是与APP有关系的子网站(APPWeb)。如果该请求指向了一个标准的网站,那么SharePoint 2013会遵循之前版本典型的认证过程;如果是与APP相关的话,则会初始化一个包含用户认证和APP认证的上下文(context)。

如果没有找到登录令牌,SharePoint就知道这不是用户发起的请求。在这种情况下,SharePoint会寻找OAuth令牌来识别远程应用。当找到安全令牌之后,它会创建包含APP认证和用户认证(可选)的上下文。

身份认证(Authentication)之后再来看授权(Authorization)。上下文创建之后,SharePoint会决定授予APP什么样的权限,跟用户权限一样,SharePoint通过自身的内部内容数据库来跟踪授权。

具体的认证授权流可参加下图,更多信息

每个APP都有一个manifest.xml清单文件,开发人员可以在这里通过AppPermissionRequests节点来定义APP需要访问的资源列表,下面的代码片段提供了一个示例(provider-hosted APP):

<AppPermissionRequests AllowAppOnlyPolicy="true">
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
<AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write">
<Property Name="BaseTemplateId" Value="101"/>
</AppPermissionRequest>
<AppPermissionRequest Scope="http://sharepoint/userprofilestore/feed" Right="Post"/>
<AppPermissionRequest Scope="http://exchange/calendars" Right="Schedule"/>
</AppPermissionRequests>

注意这里面的第一行,APP的权限请求启用了app-only策略,它意味着只有APP(没有当前用户)需要必要的权限。如果没有使用该策略,则表示APP和当前用户都需要必要的权限来完成任务如访问整个网站集或在列表中创建项目,这会使上下文同时包含APP和用户的身份。

app-only策略可以提高APP的权限,使得它可以比当前用户做更多的事。当用户安装包含AppPermissionRequest条目的APP时,该用户必须在安装时授予APP清单中声明的权限。

ACS不能在本地部署的非Office 365环境中使用,意味着本地部署也没有OAuth令牌。本地APP需要使用一种不同的安全令牌,该令牌由Server-to-Server(S2S)配置创建,更多信息

关于APP的安全,我们还应该知道以下事情:

APP运行在它们自己的域内(防止跨网站脚本攻击),用JavaScript编写,但这并不意味着它们是安全的。作为开发人员,仍需考虑因为APP的设计导致的安全漏洞和敏感信息泄漏的问题。

SharePoint-hosted APP没有指定列表或网站级别的授权,换句话说,如果一个APP对一个列表有写入权限,它对另一个列表也有。

当用户为provider-hosted APP授权的时候,这是一个一次性过程,即使之后APP的逻辑代码改变了,SharePoint对此也并不知情。

当APP使用OAuth令牌来完成一些任务时,页面上另一个APP也可以使用该APP的身份和用户的身份。在这种情况下,黑客可以通过不安全的通信协议(HTTP)来拦截OAuth令牌。

所以,我们在开发APP时,需要用心设计并尽量使用HTTPS来加密通信协议。

SharePoint 2013 开发——APP安全模型的更多相关文章

  1. SharePoint 2013 开发——APP开发的考虑和建议

    博客地址:http://blog.csdn.net/FoxDave 需要考虑的方面: 1. 记得CSOM授予网站集及以下的权限,而场解决方案需要整个场的访问权限. 2. 由于应用程序是彼此完全独立 ...

  2. SharePoint 2013 开发教程

    做了SharePoint有三年了,大家经常会问到,你的SharePoint是怎么学的,想想自己的水平,也不过是初级开发罢了.因为,SharePoint开发需要接触的东西太多了,Windows操作系统. ...

  3. SharePoint 2013 开发——概述

     博客地址:http://blog.csdn.net/FoxDave 近来阅读SharePoint 2013开发一书,带着与大家一起分享其中的内容. 部署场景: 本地部署(On-Premise D ...

  4. 系列文章--SharePoint 2013 开发教程

    做了SharePoint有三年了,大家经常会问到,你的SharePoint是怎么学的,想想自己的水平,也不过是初级开发罢了.因为,SharePoint开发需要接触的东西太多了,Windows操作系统. ...

  5. SharePoint 2013 搭建app本地开发环境

    使用SharePoint App,如果要通过应用程序目录分发 SharePoint 相关应用程序,如具有完全控制权限的 SharePoint 相关应用程序(无法部署到 Office 365 网站),则 ...

  6. SharePoint 2013 开发——开发自定义操作APP

    博客地址:http://blog.csdn.net/FoxDave 自定义操作即我们所说的Ribbon和ECB(Edit Control Block),在SharePoint 2013之前,我们可以 ...

  7. SharePoint 2013 开发——Provider-hosted APP准备工作

    博客地址:http://blog.csdn.net/FoxDave 后续的内容我们来一步一步开发一个SharePoint Porvider-hosted APP,本篇主要介绍一些准备工作. Sha ...

  8. SharePoint 2013 开发——开发并部署第一个APP

    博客地址:http://blog.csdn.net/FoxDave 本篇我们开始对开发APP应用程序进行了解. 本篇基于本地SharePoint环境(如果是Office 365的话会方便许多),需 ...

  9. SharePoint 2013 开发——SharePoint APP介绍

     博客地址:http://blog.csdn.net/FoxDave 新的APP模型让我们能够创建看起来像是SharePoint的一部分的应用程序,但是它完全运行在独立于SharePoint服务器 ...

随机推荐

  1. php中mysql数据库异步查询实现

    问题 通常一个web应用的性能瓶颈在数据库.因为,通常情况下php中mysql查询是串行的.也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行.这个时候,如果执 ...

  2. drupal_get_path_alias

    drupal_get_path_alias('path','language')这个函数是去读取url_alias表,获得某个path在特定language下的alias列的值--刚开始我 dpm(d ...

  3. AHCI驱动安装

    目录 第1章 Windows XP    1 1.1 更新驱动    1 第2章 Windows 7    7 2.1 修改注册表    7 2.2 更新驱动    7 第1章 Windows XP ...

  4. javaweb2 URL(查找的过程)

    URL: 全名叫统一资源定位符,用于定位互联网的资源. 问题:接上(javaweb1 tomcat)http://localhost:8080/myweb/test.html 分析:http://-- ...

  5. robotframework笔记11

    测试用例的语法 基本语法 测试用例构造测试用例表中可用 关键词. 关键字可以进口 测试库 或 资源 文件 或创建的 关键字表 的测试用例文件 本身. 测试用例表中第一列包含测试用例的名称. 一个 测试 ...

  6. 关于WorkFlow的使用以及例子

    近期做项目,项目需要用到工作流方面的技术,我在这里与大家分享一个workFlow学习的地址,共大家学习. http://www.cnblogs.com/foundation/ 各文档的说明: F资料├ ...

  7. [Java] java文件读写操作大全

    一.获得控制台用户输入的信息 //可以返回用户输入的信息,不足之处在于不支持中文输入,有待进一步改进 public String getInputMessage() throws IOExceptio ...

  8. jq 中each的用法

    jQuery的each方法的几种常用的用法 each()方法能使DOM循环结构简洁,可遍历一维数组.多维数组.DOM, JSON 等等. var arr = [ "one", &q ...

  9. viewDidLoad && loadView

    viewDidLoad 方法在controller加载了相关的views后被调用,而不论这些views存储在nib文件里还是在loadView函数中生成. loadView 方法在控制器的 view ...

  10. 百度地图API:利用瓦片生成工具,自定义背景图片

    参考酸奶小妹的博文<[百度地图API]如何制作一张魔兽地图!!——CS地图也可以,哈哈哈> (http://www.cnblogs.com/milkmap/archive/2011/05/ ...