作者:陈希章 发表于 2017年12月27日

这篇文章经过多次修改,终于在今天晚上写完了,演示用的范例代码也终于跑通了。因为这个SSO的功能目前只是Preview的状态,所以本篇文章严格参考了官方的文档,并且对其中的重点环节做了提示,对最终效果做了说明。

官方的文档请参考 https://docs.microsoft.com/en-us/office/dev/add-ins/develop/sso-in-office-add-ins

Office Add-in SSO 认证流程和原理

实现Office Add-in 的单点登录是要解决一个典型问题:已登陆到Office的用户,能否直接利用他自己的身份去访问到Microsoft Graph的资源,而无需再次登录。

请注意,目前这个功能是Preview的状态。所以要进行测试的话,你必须是某个Office 365 Tenant的全局管理员。如果不具备这个条件,你将无法完成这个实验,但你可以通过这个文章对单点登录流程和效果有一个基本认识。

下图是Office Add-in中进行SSO认证的标准流程。这里面涉及到几个部分

  1. Office 宿主程序。

  2. Office Add-in
  3. Office Add-in Service(通常是一个API服务)
  4. Azure AD V2(请注意,必须是2.0)
  5. Microsoft Graph

基本流程如下

  1. Office Add-in发起一个请求,getAccessTokenAsync。

  2. Office 宿主程序会向Azure AD 发起一个请求,去获取当前用户的一个所谓的addin token。
  3. Office Add-in得到这个addin token后,将其发送到Office Add-in Service,并请求Microsoft Graph的资源。请注意,Office Add-in 和 Office Add-in service必须使用同一个域名。
  4. Office Add-in Service 向Azure AD发起请求,利用addin token交换得到真正的access token。
  5. Office Add-in Service 利用得到的access token去访问Microsoft Graph,并将结果返回给Office Add-in。

如何运行官方案例,体验Office Add-in SSO的效果

我是完全按照 这篇文章进行了实验,并且已经做出来效果。下面我将有关的步骤,尤其是一些要注意的步骤介绍一下。(该文档的部分地方存在一些小问题,我已经提报给作者了)。

  1. 实验环境。你需要安装最新的Visual Studio 2017和Office 2016(版本1708或者更新)。

  2. 克隆这个代码库 https://github.com/officedev/office-add-in-aspnet-sso

  3. 在***Completed***目录中找到 Office-Add-in-ASPNET-SSO.sln,双击打开这个解决方案。

  4. 此时编译解决方案会报错,请运行 Install-Package Microsoft.Identity.Client -IncludePrerelease 命令安装一个包。再次编译,请确保没有任何错误。

  5. https://apps.dev.microsoft.com/ 注册一个应用程序,这个步骤比较重要,一定要严格按照说明操作。下面是我注册的信息,请一定要确保保持一致。

  6. 将上图中的Application ID和Application Secret信息记下来,并且将Application ID的信息替换掉这个地址中的占位符:https://login.microsoftonline.com/common/adminconsent?client_id={application_ID}&state=12345 得到 https://login.microsoftonline.com/common/adminconsent?client_id=f7e0154d-1258-42ef-9e89-9857889f4e01&state=12345。

  7. 目前来说,要测试这个功能,你必须拥有一个Office 365 Tenant的全局管理员身份。在浏览器中输入上面这个地址,然后提供你的管理员身份,你会收到如下的提示,要你接受授权的请求。

    点击“Accept”(有时候可能要两次)后,页面会被重定向到下面的地址。请不要惊慌,因为当前我们的Office Add-in网站没有运行起来,所以确实会报告“无法访问此网站”。在这里,只要将地址栏中的tenant这个查询字符串的信息记下来即可(我的例子是:ca2af238-5e61-4608-8622-797a954c4d65),后面要用到。

  8. 回到Visual Studio 2017里面来,找到 Office-Add-in-ASPNET-SSO-WebAPI 这个项目中的Web.config文件,在appsettings里面修改几个设置信息。

  9. Office-Add-in-ASPNET-SSO 这个项目中,找到 Office-Add-in-ASPNET-SSOManifest这个文件,在最底部,修改WebApplicationInfo这个节的信息如下:

  10. 选择Office-Add-in-ASPNET-SSO 这个项目,在右键菜单中选择“发布”,然后新建一个配置文件:

    然后点击“打包外接程序”按钮

    输入当前本地调试用的网址后点击“完成”,你将得到一个可以用于部署的清单文件

  11. 利用清单文件加载该Add-in。这个Add-in是用于PowerPoint的,它的详细代码我这里就不展开了,它实现了一个简单的功能用来读取当前用户的OneDrive for Business中的文件列表信息。

    我的实验环境中,当前用户的OneDrive for Business中有如下的文件:

    请在Visual Studio中将“Office-Add-in-ASPNET-SSO-WebAPI”这个项目运行起来,然后通过PowerPoint Online创建一个演示文档,在菜单中选择“插入”=》“Office 加载项”,然后选择“上载我的加载项”,选择上一步骤中生成的XML文件。

    然后你可以在工具栏中看到一个新的按钮,点击之后可以显示一个任务面板

    最后,激动人心的时刻终于要到了。点击任务面板中的“Get My Files From OneDrive”按钮,你将在任务面板的下方看到OneDrive for Business中的文件列表信息。

    当然,很多时候,我也发现会遇到如下的错误。

结语

本文对于最新的Office Add-in中实现单点登录(SSO)的方案进行了讲解,并且将配套的实例进行了测试。由于当前这个功能还是非常早期的阶段,所以可能你在做实验的时候,也会遇到这样那样的问题。如果遇到,可以给我留言。我过一阵子会继续关注一下这个功能的进展,给大家更新。

在Office Add-in中实现单点登陆(SSO)的更多相关文章

  1. 解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题

    解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring S ...

  2. Spring Security 解析(六) —— 基于JWT的单点登陆(SSO)开发及原理解析

    Spring Security 解析(六) -- 基于JWT的单点登陆(SSO)开发及原理解析   在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把 ...

  3. ASP.NET在不同情况下实现单点登陆(SSO)的方法

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...

  4. CAS单点登陆 SSO

    什么是单点登陆 SO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方 ...

  5. ASP.NET 单点登陆

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...

  6. cas单点登陆。就这一篇就够了!!!!!

    前言: cas是什么我就不累赘说了.就简单说下大致的流程.首先,cas是一个独立的项目.就是一个war包,部署在tomcat上面启动就ok.然后我们要实现单点登陆,无疑是访问系统1,如果没有登录,就跳 ...

  7. 集成基于OAuth协议的单点登陆

    在之前的一篇文章中,我们已经介绍了如何为一个应用添加对CAS协议的支持,进而使得我们的应用可以与所有基于CAS协议的单点登陆服务通讯.但是现在的单点登陆服务实际上并不全是通过实现CAS协议来完成的.例 ...

  8. 集成基于CAS协议的单点登陆

    相信大家对单点登陆(SSO,Single Sign On)这个名词并不感到陌生吧?简单地说,单点登陆允许多个应用使用同一个登陆服务.一旦一个用户登陆了一个支持单点登陆的应用,那么在进入其它使用同一单点 ...

  9. cookie+memcached实现单点登陆

    10年的时候在iteye的第一篇文章记录了一下当时怎么实现我们系统的单点登陆.不过那个时候文章写的不好,思路也很浮躁,很难看懂,在csdn的第一篇技术博客打算重新温顾一下当时实现单点登陆的思路.先来看 ...

随机推荐

  1. 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理

    1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...

  2. Node做中转服务器,转发接口

    查询各种资料,和整理网上一哥们不完整的接口.做成,可以使用的转发服务! 由于项目在做前后端分离,牵扯跨域和夸协议问题,临时抱佛脚,选择用nodejs做中转,我想应该好多人都用它.但是做普通的表单转发没 ...

  3. Gmail,QMail,163邮箱的 IMAP/SMTP/POP3 地址

    我们在客户端设置邮箱或者使用 PHPMailer 发送邮件的时候,我们都会去查找这些邮箱的 IMAP/SMTP/POP3 地址,这里就列出 Gmail, QMail, 163邮箱这三个常用邮箱的这些地 ...

  4. c语言的类型、运算符与表达式

    title: 2017-10-17c语言的类型.运算符与表达式 tags: c程序设计语言 grammar_cjkRuby: true --- 1.1 数据类型 char 字符型,一个字节 int 整 ...

  5. [转载] kill命令

    转载自http://www.cnblogs.com/peida/archive/2012/12/20/2825837.html Linux中的kill命令用来终止指定的进程(terminate a p ...

  6. Getting Started With setuptools and setup.py

    https://pythonhosted.org/an_example_pypi_project/setuptools.html http://www.ianbicking.org/docs/setu ...

  7. linux下高可用LVS搭建及配置方法

    一,安装与配置ipvsadm   ipvsadm --help  #查询是否安装成功     二,配置Director Server服务器 1. ifconifg eth0:0 183.61.87.4 ...

  8. mysql主从同步+mycat读写分离+.NET程序连接mycat代理

    背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...

  9. 静态频繁子图挖掘算法用于动态网络——gSpan算法研究

    摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的 ...

  10. 从.git文件夹探析git实现原理

    git是一款分布式代码版本管理工具,通过git能够更加高效地协同编程.了解git的工作原理将有助于我们使用git工具更好地管理项目.通过了解.git文件夹中的文件组成,我们可以从一个角度去窥探git的 ...