Teams Bot开发系列:Bot验证

我们今天来说一下authentication,authentication一直是一个复杂的问题。bot里的authentication也不简单。我们先来看一个概念:Bot Framework Token Service,根据官方定义,这个token service主要是:

  • Facilitating the use of the OAuth protocol with a wide variety of external services.
  • Securely storing tokens for a particular bot, channel, conversation, and user.
  • Acquiring user tokens

可以看到这个service会和外部的服务沟通,保存一些已经获取的token,这样下次再来申请token的时候Bot Framework Token Service可以返回已经保存的token。

我们以一个例子来看一下具体的做法:

BotAuth

假设用户促发了一个操作,要完成这个操作需要我们的bot调用Graph API,而调用Graph API需要有调用的Token。

  1. 用户促发了一个email请求操作

  2. 这个操作作为一个activity被发送给了Bot Framework channel service,后者把这个请求进一步发送给了我们的bot服务。

  3. 我们的bot service发现用户的activity需要一个访问Graph API的token,所以就问Token Service请求这个token

  4. 由于这是此用户第一次发起这个请求,Bot Framework Token Service之前没有保存过这用户的token,所以它返回给我们bot说,没有找到token。

  5. bot会为了获取token,需要用户确认授权,所以bot创建了一个OAuthCard对象,并且含有GraphConnection的名字,并且把这个OAuthCard穿回Channel Service

  6. Bot Framework Channel Service收到这么一个请求后,就会调用Bot Framework Token Service来获取一个合法的OAuth登入网址。这个登入网址会被加入到OAuthCard对象

  7. Bot Framework Channel Service将含有OAuth登入网址的OAuthCard对象发送回用户,这个对象会有一个sign-in的按钮。

  8. 用户收到OAuthCard对象,点击上面的登入按钮,聊天客户端会打开用户登入的网页,让用户登入。

  9. 在用户登入授权后,外部的Identity Provider就会把token传回给Bot Framework Token Service,Bot Framework Token Service则会安全地把token保存下来。

  10. 我们的bot收到token后就可以对Graph API发起请求了。

等到下一次如果我们bot又需要同一个用户的token时,Bot Framework Token Service会从TokenStore里找到之前保存的token,如果token还没有过期的话,就直接返回给bot了。

authentication实际上是一个十分庞大复杂的topic,有兴趣的读者还可以参考 这篇文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆排序

目录 一、定义二、算法分析三、代码地址一、定义 1.1 堆 ​ 此处的堆,指数据结构中的堆。而不是内存中的那种内存堆,内存堆是基于数据结构的一种实现。堆的数据结构是一棵完全二叉树,它有如下特点:(具体参考下文链接&a…

Teams Bot开发系列:Middleware

middleware是目前一些framework比较流行的概念,通常一个开发框架需要提供一些可扩展可定制化的功能。所以middleware这种pattern就很实用。 熟悉asp.net core的开发可能第一个想到的就是asp.net core的middleware,如下图: 当一个http reques…

如何获取租户中所有的Team

大家在使用Graph API开发Teams App的时候,有时候会需要获取某个租户Tenant的所有team,在写这篇文章的时候Graph API并没有提供这么一个功能,没有一个类似于”GET /teams”的api。 在Micorsoft Graph官方文档的已知问题中,也提到了…

mysql常用快速查询修改操作

mysql常用快速查询修改操作 一、查找并修改非innodb引擎为innodb引擎 # 通用操作 mysql> select concat(alter table ,table_schema,.,table_name, engineinnodb;) from information_schema.tables where table_schema not in (information_schema,mysql,performance_schem…

ElasticSearch教程——自定义分词器(转学习使用)

一、分词器 Elasticsearch中,内置了很多分词器(analyzers),例如standard(标准分词器)、english(英文分词)和chinese(中文分词),默认是standard. s…

使用Azure Serverless来开发Teams App

Azure Function可以说比较早期的一个serverless服务,随着这些年云服务的大行其道,Serverless在概念越来越火,什么叫serverless? Serverless computing (or serverless for short), is an execution model where the cloud provide…

Angular之RouterModule的forRoot与forChild

Angular 提供了一种方式来把服务提供商从模块中分离出来,以便模块既可以带着 providers 被根模块导入,也可以不带 providers 被子模块导入。 区别: forRoot creates a module that contains all the directives, the given routes, and the r…

关于 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh的解决办法

关于 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh的解决办法 记录工作中遇到的问题 someone could be eavesdropping on you right now (man-in-the-middle attack) ssh  由于远程机器或者重组或者更新了ssh server导致本地记录的验证信…

使用AzureFunction开发最简单的Teams Outgoing Webhook

上篇文章讲了teams app的serverless架构,这篇主要讲如何真正使用Azure Function来开发一个最最简单的Teams Outgoing Webhook。 我们先登入azure的portal,创建一个azure function。我这里创建了一个名字叫outgoing-webhook的azure function。完成后如下…

Java 基础 之 标识符

www.verejava.com/?id1699254… /* 标识符的命名规则: 1. 是以字母,数字,下滑线_和美元符号$ 组成 2. 不能以数字开头 3. 区分大小写 4. 不能是java的保留关键字 5. 最好是见名思意 */ public class Identifier {public static void main(String[] args…

Ubuntu宿主机与VMware中其他系统虚拟机的互通

Ubuntu做宿主机,VMware中创建Windows10,并且通过三种模式实现两系统互通,其实并非是件难事。在有线网卡未接网线的环境下,关闭两系统防火墙,基本遵从下文便可实现。 转载:https://note.youdao.com/ynotesha…

使用Azure轻松实现Teams App的全球合规性

我在之前的一篇博客里面讲了合规性对于我们Teams app是非常重要的,因为office365平台就是面向全世界用户的,我们开发的teams app一旦发布后,立刻就会有各国各地区的用户来进行安装使用,所以符合用户所在地区的要求是非常重要的。 …

【php复习之】php创建数组的几种方式

1、array()函数 1.1无key值 $arrarray(1,2,3,4); 1.2键值对 $arrarray( name>myj,age>18,phone>1888888888);1.3空数组 $arrarray(); 2、compact()函数 compact函数可以把变量转换为数组。 $a aaa;$b bbb;$c ccc;$arr3 compact(a,b,c);输出:{"a&q…

ADC知识(2)——直流参数(输入电压参考,参考电流输入,积分非线性误差,差分非线性误差)...

目录 四、 输入参考电压范围 五、 参考电流 六、 非线性问题 差分非线性误差 积分非线性 四、 输入参考电压范围 大多数数据手册中,将它定义为一个特定的参考电压值,通常这个电压作为 此转换器最常用的参考电压。在参考输入电压…

LuckyDraw app使用CosmosDB的成本分析

我在以前的博客里说过我的LuckyDraw app在数据存储方面使用的是 Azure Table Storage,当时选择这个的原因是成本考虑,因为它实在是便宜,对于我这种个人开发维护的免费的teams app来说,成本是一个很重要的考量点。 当然&#xff0…

React 重温之 组件生命周期

生命周期 任何事物都不会凭空产生,也不会无故消亡。一个事物从产生到消亡经理的各个阶段,我们称之为 生命周期。 具体到我们的前端组件上来,一个组件的生命周期可以大体分为创建、更新、销毁这个三个阶段。 本文主要介绍React 的组件生命周期…

迁移聊天记录到Teams

有一些朋友问我teams是否支持将其他平台/系统里的聊天记录迁移某个channel里,答案是肯定的,teams团队在去年年中的时候就提供了这个功能。这个功能是通过graph api来完成的,我们今天就来看看如何迁移聊天记录到teams里。 首先,我…

leetcode-191-Number of 1 Bits

题目描述: Write a function that takes an unsigned integer and returns the number of 1 bits it has (also known as the Hamming weight). Example 1: Input: 11 Output: 3 Explanation: Integer 11 has binary representation 000000000000000000000000000010…

androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题

进入D:\androidsdk\tools文件夹: 使用编辑文件工具: rem Check we have a valid Java.exe in the path.set java_execall lib\find_java.bat 替换成下列代码: rem Check we have a valid Java.exe in the path.set java_exeC:\Program Files\…

10 个优质的 Laravel 扩展推荐

这里有 10 个用来搭建 Laravel 应用的包 为何会创建这个包的列表?因为我是一个「比较懒」的开发者,在脸书上是多个 Laravel 小组的成员。平日遇到最多的问题就是开发是需要用那些包。我很懒所以我不想每次都从头开始搞这些东东。 为何此文没有包括管理包…