除非开启了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. refreshLayout 和 滑动控件的冲突解决

    listView.setOnScrollListener(new OnScrollListener() {           @Override     public void onScrollSt ...

  2. Selenium Grid 运行报错 Exception thrown in Navigator.Start first time ->Error forwarding the new session Empty pool of VM for setup Capabilities

    Selenium Grid 运行报错 : Exception thrown in Navigator.Start first time ->Error forwarding the new se ...

  3. js setTimeout 与 setInterval 以及 for 循环 刷新UI

    1. setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式:执行一次: 如果需要执行多次,自身再次调用 setTimeout(): 示例:无穷循环并带停止按钮的 <html&g ...

  4. linux笔记:文件编辑器vim

    vim的3种工作模式: 在命令模式下进入插入模式: 定位命令: 删除命令: 复制和剪切命令: 替换和取消命令: 查找和替换命令: 保存和退出命令: 导入命令执行结果和定义快捷键:

  5. English word

    第一部分  通过词缀认识单词 (常用前缀一) 1.a- ①加在单词(形容词)或词根前面,表示"不,无,非" acentric [ə'sentrik] a  无中心的(a+centr ...

  6. DBUtils学习

    1.       DBUtils是JDBC的简单封装,可以和JDBC混合使用. 2.       DBUtils对结果集自动封装为JavaBean是有着苛刻要求的:必须满足JavaBean的规范,其次 ...

  7. this(C# 参考)

    原文地址:https://msdn.microsoft.com/zh-cn/library/dk1507sz.aspx this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符. 注意 ...

  8. 获取本机 Android 默认sha1 秘钥

    获取本机 Android 默认sha1 秘钥: 以Windows操作系统为例,打开CMD,运行以下指令将得到所有默认秘钥. keytool -list -v -keystore C:\Users\pa ...

  9. (01)odoo模型中调用窗体动作

    *模型代码  addons/stock/stock.py  ----------------   #移库单执行移库动作(弹出详细框)    @api.cr_uid_ids_context    def ...

  10. (10)odoo控制器操作

    -----------------更新时间11:17 2016-09-18 星期日    完善讲解17:44 2016-02-17 星期三-----------------* 控制器Controlle ...