博客地址:http://blog.csdn.net/FoxDave

上一篇我们介绍了发起Microsoft Graph请求的核心:访问令牌。本篇我们探讨一下在使用Microsoft Graph进行查询时可能遇到的多种认证场景。

OAuth 2.0 flows

Microsoft标识平台实现了一些OAuth 2.0规格书中定义的认证场景。

授权代码

授权代码流很可能是最常用的获取访问令牌的流。该流分为两个部分:认证/授权部分和令牌请求。

首先,用户信息被发送到Azure AD登录页。在web应用中,这是一个简单的跳转。在本地应用程序中,这包含了打开访问Azure AD网站的浏览器对话框。URL包含了标识发起请求的应用程序和请求的权限scopes的参数。如果用户是第一次使用应用程序(或者请求的权限级别跟上次用户使用应用程序时不同),所请求权限的列表会展示给用户,让用户进行查看并决定是否批准这些权限。
如果用户批准了请求的权限,浏览器会带着授权码一起跳转回应用程序。之后应用程序就可以把这个授权码和应用程序密钥发送POST请求到Microsoft标识平台令牌终结点去获取访问令牌了。

权限的类型
使用这种流的应用程序利用托管权限。从该流返回的访问令牌会带有一个用户上下文。

什么时候使用授权代码
如果应用程序:

  • 是服务端Web应用程序或本地/移动端允许用户交互的应用程序
  • 需要以用户身份访问Microsoft Graph

使用授权代码是最佳选择。

隐式授权

隐式授权流的启动方式跟授权代码流一样,通过将用户跳转到Azure AD登录页。然而,这种流不返回授权码,而是返回访问令牌。

这种简化流用来支持用JavaScript实现的单页应用程序 (SPA)。由于这些应用程序完全地在用户的浏览器中运行,很可能是没有后台组件的,所以如果要进行授权代码流就会有如下困难:

  • 在客户端JavaScript代码中存储不被发现的应用程序密钥是不可行的。
  • 大多数认证服务器 (包括Microsoft标识平台)不支持CORS请求。

这种流通过消除应用程序密钥并且不涉及POST请求来解决这些问题。

权限的类型
使用这种流的应用程序利用托管权限。从该流返回的访问令牌会带有一个用户上下文。

什么时候使用隐式授权
如果应用程序是客户端JavaScript单页应用程序并且没有后台组件,使用隐式授权流是最佳选择。

客户端凭据流

客户端凭据流不同于前面的两种流,体现在两个主要方面。首先,该流不需要任何用户交互,因此对于服务或无人值守进程应用程序是最好的选择。第二,该流使用应用程序权限,而不是托管权限。

尽管该流自身不需要用户交互,但需要组织的管理员对应用程序所需的权限进行批准。这是一个可以发生在应用程序注册时的一次性过程,或者我们可以构建一个最小的Web应用程序来让管理员去对应用程序进行认证和授权。

管理员对应用程序进行授权之后,应用程序就可以通过提供它的应用程序ID和密钥来获取访问令牌,或通过在应用程序注册时跟Azure AD共享的证书对请求令牌进行签名。

权限的类型
使用这种流的应用程序利用应用程序权限。从该流返回的访问令牌不会带有用户上下文,是对组织内的所有用户进行授权的。

什么时候使用客户端凭据
如果应用程序需要组织内的所有用户访问,不需要实现UI或运行在非用户交互的场景下(如服务、计划任务等),使用客户端凭据流是最佳选择。

代理流

代理流用于中间层服务场景。它通常包含一个使用授权代码或隐式授权的用户应用程序和一个受Azure AD OAuth保护的用于访问Microsoft Graph的Web API或服务。

在该流中,用户登录到前端的应用程序,获取一个向中间层服务授权的访问令牌。然后中间层服务使用该访问令牌来获取另一个访问令牌代理用户访问Microsoft Graph。

该流不同于正常的授权代码流,因为前端应用程序本身无法访问Microsoft Graph。

权限的类型
使用这种流的应用程序利用托管权限。从该流返回的访问令牌总是带有用户上下文。

什么时候使用代理
如果应用程序包含多个组件,包括前端用户应用程序和后端的Web API或服务,使用代理流是最佳选择。

刷新访问令牌流

Microsoft标识平台发布的访问令牌的生命周期是短暂的,一个小时之后过期。应用程序可以在用户不取消应用程序授权的情况下,请求新的访问令牌而不需要用户重新授权。做这个的方式取决于应用程序使用的流的类型。

  • 使用授权代码流或代理流的应用程序可以请求offline_access范围去获取一个新的访问令牌。应用程序使用刷新访问令牌发起POST请求到Azure AD的访问令牌终结点来获取一个新的访问令牌。
  • 使用隐式授权流的应用程序不具有刷新访问令牌。然而,应用程序运行在用户的浏览器中,会话是被保持的。应用程序可以使用隐藏的iframe默默地请求一个新的访问令牌。
  • 使用客户端凭据流的应用程序同样不具有刷新访问令牌。由于在该流中请求访问令牌不需要用户交互,应用程序只需要以获取初始访问令牌的方式去使用POST请求获取新的访问令牌即可。

练习

读者可以通过浏览器或者Postman尝试授权代码流。

  1. 注册V2版本的Azure AD应用程序,确保redirect URI处填写为https://localhost:8080
  2. 打开Postman创建一个新的POST请求到https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token,将YOUR_TENANT_ID替换为自己创建的应用程序的实际的租户ID。
  3. 配置如下图内容。
  4. 打开浏览器访问https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/authorize?client_id=YOUR_APP_ID&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A8080&response_mode=query&scope=openid%20profile%20offline_access%20User.Read,同样将YOUR_TENANT_ID和YOUR_APP_ID进行替换。
  5. 登录并对应用程序进行授权,浏览器会跳转回https://localhost:8080/并显示一个网站无法访问的错误。
  6. 复制浏览器地址栏中的URL,它应该形如https://localhost:8080/?code=IAQABAAIAAAC…&session_state=…。复制code参数值的所有内容,它就是Microsoft标识平台返回的授权代码。
  7. 将授权代码粘贴到Postman请求中的code参数部分,然后发送请求。
  8. 返回的响应JSON中会包含访问令牌、刷新令牌和ID令牌,如下图。

Microsoft Graph for Office 365 - 认证和授权场景相关推荐

  1. Microsoft Graph for Office 365 - 用例:更新用户邮箱设置

    博客地址:http://blog.csdn.net/FoxDave 上一篇文章我们实现了在.Net Core应用程序中去为用户分配一个许可的操作.本篇我们将实现更新用户Office 365中邮箱设置的 ...

  2. Microsoft Graph for Office 365 - 用例:Microsoft Teams相关的交互

    本篇我们介绍Microsoft Teams相关的内容. Microsoft Teams介绍 Microsoft Teams是用于企业沟通协作的软件,可以即时消息,语音通话,在线会议等.它以团队为基础单 ...

  3. Microsoft Graph for Office 365 - 身份验证路线图和访问令牌

    博客地址:http://blog.csdn.net/FoxDave 本篇我们介绍并展望Microsoft Graph的身份验证状况,特别是获取访问令牌的部分. 任何对Microsoft Graph的请 ...

  4. Office 365:如何删除和管理Microsoft Team (Office 365 Groups)Team Site

    博客地址:http://blog.csdn.net/shelleyliu0415 2016年年底,微软正式发布基于Office 365平台的一款高效提高团队沟通和交流的工具:Microsoft Tea ...

  5. Microsoft Defender for Office 365部署方案

    目录 前言 一.Microsoft Defender for Office 365 部署架构 1.部署环境 2.Microsoft Defender for Office 365 核心服务

  6. Office 365系列(3)------Office 365认证使用ADFS安装部署参考

  7. 人工智能背景下的Office 365现状和发展趋势

    作者:陈希章 发表于 2017年7月31日 引子 谈论人工智能是让人兴奋的,因为它具有让人兴奋的两大特征 -- 每个人都似乎知道一点并且以知道一点为荣,但又好像没多少人能真正讲的明白.毫无疑问,我也仅 ...

  8. win10 uwp 使用 Microsoft.Graph 发送邮件

    在 2018 年 10 月 13 号参加了 张队长 的 Office 365 训练营 学习如何开发 Office 365 插件和 OAuth 2.0 开发,于是我就使用 UWP 尝试使用 Micros ...

  9. outlook响应服务器450,与 Office 365 一起使用时,Outlook 崩溃或停止响应 - Exchange | Microsoft Docs...

    如何解决导致与 Office 365 一起使用时 Outlook 崩溃或停止响应的问题 2021/4/13 适用于: Exchange Online, Outlook 2019, Outlook 20 ...

最新文章

  1. 特征选择和特征生成问题初探
  2. GUI学习之十四——QAbstractSpinBox学习总结
  3. app中html静态页面缓存,移动端index.html被缓存问题
  4. eclipse安装java web插件
  5. Redis:20---常用功能之(发布与订阅)
  6. RS-232、RS-422与RS-485标准
  7. 大学计算机专业绩点在3.5算好,大学绩点3.5算什么水平 绩点低有哪些补救方法...
  8. 基于FPGA的车牌识别
  9. CDH-CM资源下载
  10. 老毛子最想固件,支持打印机了
  11. wasatch排版教程_[2010年国内外最新最全最专业的设计软件下载.docx
  12. 在html中打字如何变大,如何把字体放大 如何更改桌面与网页字体大小-电脑教程...
  13. Paperreading 之二  多人人体姿态估计COCO2017冠军—CPN
  14. 如何高效搜索公众号文章(r11笔记第35天)
  15. 电压源电流源电路符号及2B法
  16. 为什么OpenCV4 “pkg-config --modversion opencv”显示“ No package ‘opencv‘ found”?解决方法!
  17. 论文翻译:2020_TinyLSTMs: Efficient Neural Speech Enhancement for Hearing Aids
  18. c语言笔记本无法读取鼠标,USB鼠标失灵了怎么办 电脑无法识别USB鼠标【详解】...
  19. 大数据项目实训总结_大数据实习报告.doc
  20. [2021-09-12]我所知道的最新CSGO国服能取回皮肤的国内开箱网站大全

热门文章

  1. 李开复:从毛遂自荐到萌生去意
  2. 20年了,永远的陈慧娴
  3. WPS整段缩进(类似代码格式)
  4. linux桌面 仿android,Ubuntu粉丝必备!仿Ubuntu锁屏App体验
  5. 源码天空java新闻_Java UpdateRequest类代码示例
  6. 数据挖掘 第四篇:OLS回归分析
  7. 处理器博通还是高通比较好_苹果手机基带高通还是Intel好?iPhone查看基带生产商厂家方法...
  8. 吹爆“Alibaba”自研Spring全家桶全套全彩学习笔记(终极版)
  9. Echarts给折线图给横竖坐标轴添加箭头与标签文字过长显示不全处理
  10. android使用其他应用打开方式,Android 启动activity的4种方式及打开其他应用的activity的坑...