除非开启了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):

  1. <AppPermissionRequests AllowAppOnlyPolicy="true">
  2. <AppPermissionRequest Scope="http://sharepoint/content/sitecollection" Right="Read"/>
  3. <AppPermissionRequest Scope="http://sharepoint/content/sitecollection/web/list" Right="Write">
  4. <Property Name="BaseTemplateId" Value="101"/>
  5. </AppPermissionRequest>
  6. <AppPermissionRequest Scope="http://sharepoint/userprofilestore/feed" Right="Post"/>
  7. <AppPermissionRequest Scope="http://exchange/calendars" Right="Schedule"/>
  8. </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. mac中openfire启动失败的解决方式

    不知为何,几次出现这个问题了 解决方法:使用终端命令 1:sudo chmod -R 777 /usr/local/openfire/bin 2:cd /usr/local/openfire/bin ...

  2. vim 学习记录2

    当前行进行替换:s/XXX/YYY/gXXX是需要替换的字符串,YYY是替换后的字符串. 全局替换:% s/XXX/YYY/g. 对指定部分进行替换用V进入visual模式,再进行:s/XXX/YYY ...

  3. MATLAB 编程风格指南及注意事项

    MATLAB编程风格指南Richard Johnson 著Genial 译MATLAB 编程风格指南Richard JohnsonVersion 1.5,Oct. 2002版权: Datatool 所 ...

  4. python进阶

    决定在python上有所突破 先看看知乎: 如何面试Python后端工程师? Python之美 - 知乎专栏 Python书籍推荐

  5. python的模式匹配 - 正则表达式

    之前学过perl,深知perl在模式匹配方面的强大,现在想完全转到python,虽说python的模式匹配没有perl那么强大,但还是可以用的,只是需要一个熟悉的过程. 参考资料: Python正则表 ...

  6. Canu Parameter Reference(canu参数介绍)

    链接:Canu Parameter Reference To get the most up-to-date options, run canu -options The default values ...

  7. Tiny PXE Server简介

    Tiny PXE Server简介Tiny PXE Server是一款小巧而功能强大的网启软件.支持DHCP TFTP HTTP BINL DNS等多个协议,支持grub4dos,pxelinux,i ...

  8. 吐槽下近期的4G手机:

    吐槽下近期的4G手机: 1.iphone6和6p,分别是4.7和5.5吋屏,1810和2915毫安时不可拆卸电池,双核64位苹果A8处理器.电池容量太小,不经用,中度使用一天一充,而且不支持VOOC闪 ...

  9. linux笔记:用户配置文件

    用户信息文件:/etc/passwd功能:存放用户基本信息每一行代表一个用户. 第一字段:用户名称第二字段:密码标志(只是一个密码的占位符,表示该用户有密码,不存放真正的密码)第三字段:UID(用户I ...

  10. 30-Razor语法基础

    以往开发ASP.NET Web Form时,在ASPX页面上都会出现许多夹杂C#/VB.NET与HTML的情况,而先前使用<%...%>这种传统圆角括号的表示法会让HTML标签与ASP.N ...