00:00
学习一下API认证啊,地址在这里。在返回响应之前啊,大多数API都需要通过某种形式的身份认证。有时候啊,未经身份认证的请求。和经过身份认证的我们的这个响应是不一样的啊,其实呃,这个认证那块呢,简单来讲就是啊,没有登录的用户看到的页面和我们这个登录之后看到的这个数据啊是不一样的,也就是主要是做这个用户认证这一块。那默认情况下呢啊,配置文件使用的是这个HTP的身份的一个基本的验证啊,就是ATP base啊,然后我们还可以使用什么JS web talking,也就GWT啊,这个认证还可以使用o2.0,但是o2.0呢,更多的是作为这个授权登录多一些,所以我们做认证的话还是使用啊GWT。啊。这是关于APP基本认证啊,一个使用的一个方法,然后是啊杰森web talking g wt。
01:02
它是来自第三方的集成的一个WC的一个生份证软件包啊,就是这个包。好。我们如果装了这个软件之后啊,就可以去。Conf这个app.pp里面去配置这个,Also使用GWT来进行啊,我们的认证啊,当然我们主要的使用就是使用GWT啊,接着往下看OC2.0呢,主要是为了做一些啊这个授权登录使用的,当然也需要使用一个。啊,这个。第三方的一个包。那我们这里做认证呢,啊,主要就是使用啊这个GWT。那我们先去看一下什么是啊,GWT,这里给大家准备了两篇文档。首先看几个这个字,还有一个talking talking呢一般是一个字符串,通常作为这个健全的一个啊凭据,也是我们在这个API健全里面使用的比较多的。
02:02
常见的几种API的建证方式,然后比如说cookie加session,和传统的这个web登录一样啊,然后使用这个APP base,它是将这个账号和密码拼接到了,就是说使用这个BASE6编码,然后拼接到head中,当然这个账号密码几乎是铭文,所以说。啊,不安全啊,还有就是啊,APP的啊,这么一个认证也是将这个呃,账号密码加信息,然后生成一个摘要。附加到这个海藻头里面。比他稍微。这个安全一点,但是也有可能是被截取的一个,可能也有可能被破解,还有就是用talking talking是通过啊,登录之后就会给我们发放一个,就是说授权的一个令牌也是talking,然后每次我们再请求需要验证身份的这个API,就带上这个健全的字符串。就是。啊,我们的API这端会验证我们talking是否是允,就是说允许我们请求啊,每可以解决每次请求都要带账号密码的一个问题,也不用反复的去使用账号密码啊,接下来主要就看一下这个talking的一个优势。
03:06
啊,Talking相比于传统的cookie加三两个什么用呢?一个是可以啊,防止这个CSRF的一个攻击,包括这个它的这个原理就不多说了,再一个比较适合做移动端的一个应用,因为有的移动端就是它不支持cookie,而我们这个筛选一般会基于这个cookie啊去。使用,所以说啊,Talking呢,是更合适移动端一些,Talking只要移动端啊,客户端能够存储,然后每次使用的时候去带上就可以了,在一种端上有优势,然后talking的一个种类一般有这个三种,一种是我们自定义的一个talking,可以根据我们的业务逻辑去自定义,再一个就是JWT,也就是Jason外部talking。它相比于我们自定义的这个talking更加的规范啊,还有就是also2.0的啊,这个talking它是另外一种啊,这个授权的一个规范,但这并不是,呃,我们就是说用于健全这种talking嘛,它只是用到了talking also20更多的是使用于这个第三方的一些啊授权。
04:04
啊。接下来看一看GWT的一个组成,也就是GW的组成部分。就是它这个talking是怎么给我们生成的,主要包含了啊,有这个一个头部,还有它的一些荷载,包括啊。呃,一些的这个其他的一些数据,最终啊,去生成了我们的这个talking这里我们就。啊,不错,说明了,最后使用这个加密啊算法去生成我们的这个talking。好。那我们怎么使用talking呢?GW使用TALKING2种方式,一种是放到这个UR中,加上一个问号,Talking等于我们talking对吧,但是这种方式不安全,它很容易被别人给截取,是不是?再一个就是附加的还的图充,我们建议使用这种。在he头中怎么使用呢?我们添加一个这个啊,这个哪个he头,然后he的值就是。这个bear加上服务端颁发给我们的这个talking就可以啦,然后用户在登录之后,服务端,服务器端会颁发给这个客户端。
05:01
一个talkingn对吧,所以说我们在客户端要想办法把这个talkingn给存储起来,以便每次在请求服务端的API的时候给携带上这个talkingn,那在客户端存储的方式有两种,一个是啊local local,一个是三星,还有就是cookie,他们这三种呢啊。比较推荐第三种,因为呃,第一种和第二种会存在一个跨域的一个限制,第三种不存在一个跨越的限制,但是第三种呢,就是在移动端的话,有可能就是会被就不支持cookie,或者有些设备去禁止了,这个cookie也是比较麻烦,一般我们去配合起来啊,和这个look加cookie去配合起来去使用啊。啊,这个是关于cookie的一些跨越的策略。啊,然后是GWT的这个talking,对比其他的talking的一些啊对比啊talking呢就是GWT呢,也是一种talking,它和普通talking什么优点,第一个是无状态啊,也就是它服务端不用去维护这个用户的啊,任何的一个状态啊,所以很好的去节省了服务器的资源,然后比较适合分布式,还有用时间去换取的这个这个空间。
06:03
啊,再一个呢是啊GWT呢,它在这个在贺中去编码的部分的一些信息啊,所以现在GW有四个特点,一个是防CSCSRF攻击,一个是比较适合运动来使用,一个是无状态,一个是编码数据啊。关于这个GW的这个安全问题,比如说啊,像这个啊,这些一些常见的安全问题,甚至是这个序列号啊,当然通过这个APS可以去解决啊,这个序列号的问题,那这些大家可以详细的去啊看一看,第二个安全问题,比如talking被盗了,因为你看比如我们附加到这个。这个的talking啊,那怎么去解决呢?一般使用ADS去传输的话,从这个传输层面去解决这个问题啊,再一个是啊,从存储层去解决这个问题,比如防止这个啊查他的攻击,窃取你的cookie。等。还有其他的一些问题,比如说关于这个注销的问题啊,然后就是说用户就注销的时候,我们如何去让这个talking,因为他还没有过期,对吧,我们让这个talking怎么失效呢?一个是使用这个黑名单策略,比如说用户注销的时候,我们把那个啊talking加入到黑名单中。
07:11
用户再次访问的时候,这个to在黑名单中,所以我们就拒绝他的这个访问,对吧,就是认为他是啊注销了啊,但是会不会使用黑名单,就是说过大呢啊是不会的,因为。黑名单,你只需要维护在这个有效期内的无效的头顶啊,过期的就直接啊销毁了。啊,这是其他的一些问题,包括这个续签的问题,三线因为可以啊,比如做到这个自动续签多长时间,像这个to,这个talking的话呢,我们可以怎么办呢,但是。可以去就是刷新它的一个过期的一个时间,对吧。当然我们可以写专门的一些方法去刷新它的这个过节时间就可以了啊。嗯,还有其他的一些啊解决方案,包括这个黑名单这个啊膨胀的一些方案。嗯,关于这些总结好,接下看看。
08:02
GWT适合做什么啊,无状态的resource for API啊,我们现在在企业的这个项目就是商城项目,就是用到的这个,呃,纯API的项目嘛,我们的风格就使用resource for这种风格,所以我们使用TWT来做我们的健全和认证是最合适的啊,再一个就是单点登录。啊,它与这个o2.1个对比啊这个呃,其实他们就不算特别算是同一个层面的一个东西,O42点一般是一个方便第三方授权的一个规范,而JWT是一个talking的一个规范。它是可以是结合去使用的啊。好,这个关于talking的这个介绍就简单的介绍到这里,不给大家就讲那么细,你们可以自己去看一看,找一些资料啊,包括这个文档写的也很细。啊,那接下来我们看一看怎么去呃使用,就是在我们拉项目中怎么去使用这个GT呢?这里有两篇文档,看哪个都可以啊。我们看这个吧,这个是拉了一个VK啊,首先你要使用。
09:04
这个GW要先安装啊。来。在我们的这个。虚拟机里面啊,我们的项目目录下。安装那个。复制一下啊。右键粘贴。安装完成之后啊,如果你的love版本是小于5.5,要把这个他的这个服务者给添到我们的卡。啊f.P里面就是注册手动去注册它的服务的,但是在5.5以后就不用了,我们使用的是拉八,所以这个就不用去添加了。嗯嗯,安装完之后啊,和我们的这个订购API一样,它的这个配置文件也是在这个window下,为了方便我们去改它的配置,所以我们还要把它的这个配置文件去,呃,发布到我们的康菲里面是什么。
10:04
好。这里已经。快安装完了啊。啊,它还是报了一个内存的一个错误,当出现这种内存的错误的时候呢,我们加上大写的composer-memory。然后里。等于负一,先取消啊,取消这个comp的一个内存的一个限制,然后再去啊进行安装,这样就可以了。整天。碰到问题不要慌,去解决问题就可以。好,先让他安装的,然后我们去复制一下这个发布配置文件的这个命令,等他安装完我们发布一下配置文件。这里已经安装完成,来我们右键粘贴一下,这个命令,我没复制上,再等一下。
11:05
好,这个时候当我们执行这个命令之后,我们的这个con里面就会多了一个啊,GWT的一个配置啊,还是它会去使用EA的一些配置,我们不要直接去啊,尽可能的不要直接去改这个文件啊,使用E那些配置在安装完成之后怎么办呢?还要执行一个命令去生成。啊,就说它加密的一个密钥,使用这个命令就可以生成,它会在因为里面自动去加上这么一个字段啊,并且设置上一个值。来执行一下啊。这里先看着我们EV。啊,最后是没有内容的,对吧,你去执行一下这个命令,粘贴生成我们的。啊,这个。加密的一个字段,好,有了,接下来看看。啊,因为我们的认证一般是基于用户的,对吧,所以要去更新一下我们用户的一个模型啊,如果你自己啊,自定义的一个用户的一个模型的话,你其实你只要实现它的这个接口就可以了,GWT的这个W接口就可以,当然我们如果使用的默认的优色的这个模型,我们也是在啊默认的这个优色模型里面去改一下就可以了啊。
12:13
找到我们优色的这个模型。啊,然后。啊。让他去。实现啊,GWT的这个。GWT啊,实现这个。就可以了。啊,写完这个之后呢。我们还要把下面这两个方法啊。给加上。要不然你看它这里会报错的,就是你你既然你要实现这个接口,你要把它的这个接口里面的方法给给给写一下,写到这吧。啊,这样就可以了,这样的话我们的user这个模型就会使用这个GWT去啊做这个认证,接下来还要干什么呢?去修改一下also.pp也就是配置文件里面的这个。
13:08
Also,又配置这个认证这块的这个PV,找到什么,找到看守器配置这一块啊看守器,然后我们主要改API这一块啊,把这个给注释掉,API呢,这个驱动我们改成啊GWT就使用GWT做驱动。就可以了。好。呃,这些后面呢,我们在后续写的功能,再说它是增加了这个登录啊,退出啊,还有刷新to的一些这个。啊,控制器这个在我们实际上去开发这个功能的时候会用到这里,那现在我们就先先不使用啊。GWT安装和配置完成之后啊,还要对什么对这个。啊,订购API进行一下配置,订购API的配置看哪呢?看这个订购API的这个认证这里啊,我们主要配置什么?主要配置它的这个a.PP里面的这个认证啊,使用的一个认证器,我们使用JWT,哎,接下来找到api.pp找到also啊搜索一下also啊在这里我们使用GWT作为我们的认证T,这样的话我们的定格API就可以使用到啊GWT。
14:19
接下来我们去写一个例子去看一看啊,那么我们如何在路由中去限制这个需要登录的啊,需要验证的一些路由呢?可以去。呃,找一下什么呢。找一下这个保护的一个级别啊,在路由上启用这个一个API,点奥数的一个中间键就可以了啊,当我们不在这个啊,这个所有的这个地方启用,我们只对特定的一个组去启用啊。这些是我们使用中间件的一些方式啊,比如说对所有的启动,然后对特定的控制器启动,然后对这个啊。只允许特定的这个,然后访问是吧,包括在控制器上去使用。
15:05
还有。呃,这里没有显,我们一般是怎么去使用呢?一般是基于这个组去使用啊。来写一下。找到root里面。API2片P啊,我们接着在下面去写。我们的路由好。需要。登录的路由。Dota API我们加一个组啊,给路由分一个组。也就是这里面的路由,我们需要登录才能访问啊,把它的API传进来。来我们定义什么呢?定义一个。啊,直接复制这个吧。好,把名字改改,也就是说我们访问这个user,获取所有的用户列表,我们需要登录才行,对吧?那我们这里方法写一写,User就是请求我们test ctrl userl方法好,请求这个地址呢,需要我们登录才行,那怎么样使用上我们的这个验证呢?加一个中间键就可以了,为我们的这个组加一个中间键。
16:17
啊,加一个。中间键使用谁呢?使用我们的。also.api做验证就行了啊。接下来我们测试一下啊。在这再新开一个来请求get方式,请求api.test下面的API里面的user。看一下啊。啊,这里写错了啊。应该是。啊api.also啊写反了。
17:01
再来看一下。是不是他说我们啊请求啊,就是说需要认证401是吧,拒绝我们访问需要认证才行,对不对啊。也就是我们现在这个啊,请求这个就需要认证才行了啊那。我们先把这个方法完成完善一下,找到我们的test controller,先把这个user方法完善一下。嗯,直接。直接这么写吧。不使用分页使用这个。啊,这里直接拿所有的用户吧,好,这个我们查看所有的用户的方法。对吧,它需要什么呢,需要。啊认证才行,也就是说我们刚才看文档的时候,看这个啊,GW的时候怎么使用,是不是我们可以放到一个头信息里面,对不对,我们搜索一下使用啊。
18:14
来往上涨。在上面啊。看一下这里的目录。找到使用这一部分。啊,使用这一部分是吧,我们可以去。放到这个图里面对不对。传这个token,但是我这个talkingn我们怎么获取,一般的话我们去执行登录的话啊,可以生成这个talkingn啊,使用这个GWT生成这个talkingn,所以我们来写一个登录的一个一个。API。那登录的话啊,当然这个就不需要放到这个里面登录。啊,执行登录。Dota API。
19:00
登录的话,我们使用POS的啊log。使用test controller。里面的这个啊,Login方法,我们去里面写一个login方法。哎,在这里面执行登录,当然登录的话会要提交一些信息过来,我们把request依赖注入啊。接下来啊,我们就简单的写表单,验证就先不写了,直接获取我们的email。Request里面传的这个email。Password等于request里面的password。因为我们认证的字段啊,我们就是说用于认证的字段可以去啊,就是。配置一下去模型里面配置,没有配置的话,默认就会使用email pass做这个用户的一个认证啊。
20:07
来看一看登录这块的啊,认证的一个代码,找到他这里的一个例子。这个是退出的啊,这个是刷新的。啊,这个是登录的。啊,我们就这么去使用吧。当然它它这里呢,是啊,直接获取到啊,这两个request的这两个,这样得到一个数组啊,也就是我们不用单个的获取,单个的获取完,我们还手动去连接这个数组。可以吧,我们也直接去。啊,从。Request里面去获取到啊这两个字段,并且把它放到一个数组里面,然后使用认证的话呢,就使用also,然后选择看守器,选择API看手器,使用它的这个呃,Tap的方法把我们的这个认证的字段传进来。
21:04
啊,就可以进行认证。如果认证。通过他会给我们返回一个talking。啊。我们把这个talking给返回就可以了,如果认证不通过。我们可以去啊。返回一个这个401的一个异常。什么?当然这里是直接用这个response阶层去返回异常,还可以使用我们呃之前学过的这个,呃,定格1PI的异常类,异常处理类去返回,对不对。啊,那他呢。呃,在得到这个talking之后,就说认证成功之后,得到这个talking之后,它是放到了这个方法里面去进行格式化了一下,进行的一个返回。清楚吧,所以啊,你直接在这里返回也可以,我们把这个方法也复制一下。啊,格式化的一个反馈。它为什么定义这个方法呢?因为我们在刷新to的时候也会啊,也会用到。
22:04
好。这样就可以了啊,在我们得到这个talking之后啊,把这个talking给传到这个方法,这个方法负责一个返回啊,这里它使用的都是这个response的这个啊,我们可以改成。改成我们的。啊,这个定格一片的一个反馈啊,等会再改,我先看看效果。接下来我们进行登录啊。再开一个接口。使用POS的方式。api.test里面的API,然后去找这个login啊,添上我们的请求的参数。参数呢,我们是post,把它放到这个body里面,放到这个phone date里面有一个email。我们再进行模拟一些表单提交的时候啊,就把它放到这个包里面,你如果放到apartment,它的参数会附到这个链接的这个后面,以问号的形式去传递的。
23:04
Email,我们艾特a.com。然后是我们的密码password。啊,1313。可以看到啊,给我们响应了一个,就是说认证未通过的一个。响应对吧。啊,当然我们可以改一改这个响应在哪去找,找到我们认证这里,然后响应这里。下面是不是有一个啊。就是说未认证的一个响应,比如这里啊,我们直接return这个也行啊,不用按照这个地方去写,这样它会自动给我们生成一个401的一个响应,这个是使用订购API的这个啊响应生成器去来返回这个错误响应来看一下。是一样的是吧,啊认证失败401啊,我们统一的尽可能的去使用这个。啊。然后。嗯,这个等会再改啊,那现在我们密码你肯定是验证不通过的,因为我们的密码在数据库里面,它一般是按照这个加密的方式去存的,这里我们写铭文肯定不对,对吧,所以我们去生成一个加密的密码给他。
24:10
啊,更新一下这个东西啊。那怎么去生成呢?我直接在这个test里面啊,就在这里面去生成吧,可以使用辅助函数BCCPT去生成这个用户的密码啊,这里我写个铭文,然后。嗯,直接滴滴一下啊,滴滴一下,我看一下这个密码,我复制一下密码之后更新一下数据库就可以了。好来请求,因为是DD啊,DD的内容啊,要在这个这里面去看。复制一下这个密码,这个是我们使用啊这个密码。这个算法可以生成那个密码。找到user表,去更新一下数据库。好。啊,这个也给更新了啊,接下来要提交到数据库才可以。好,现在已经完成了更新啊。完成了更新,那这个滴滴就可以删掉了。
25:01
接下来我们再测试密码是123是吧,我们我们按照123去加密生成的嘛,点这里啊,我们就看杰森的话去看这里啊好。是不是认证通过了,你看认证通过,他把这个啊,这个talking就给我们生成了一个talking,是不是生成了这个talking呢,他就会把这个talking呢,给传到这个方法里面,然后就给我们一个响应,对不对。看到了吧,这个响应啊,当然如果你不想使用啊,这个响应我们统一使用这个。啊,这个响应生成器的一个响应啊,可以return this啊response。啊,是属性啊,Response。里面的方法啊。生成一个数组的响应啊,这样也可以啊。来看一下。最后是不是一样的好。那。这个时候呢,我们登录成功之后,就拿到了这个talking作为对比,我给大家。
26:00
把密码改错,你看一看。就是抛出了一个啊,认证未通过的一个消息,是不是你把密码写对。哎,就得到这个token,这是我们的token的过期的一个时间啊,当然如果快过期的时候,我们是可以去啊,去刷新它的token的啊。啊,那得到这个to怎么使用呢?还记得我们的手册不?啊,是写一个这么一个头信息对吧,然后把我们的这个be加上,加上这个talking就可以了啊。接下来看一看。这个我们请求get,请求这个用户这个列表是不是需要。进行认证才行。对吧,这时候我们这边已经登录了,登录了我们拿到这个talking了,我们在请求这个接口的时候,可以把这个talking给带上,放在哪,放在head里面加上这么一个字段啊,接着呢啊,再加上一个这个啊。加上一个这个,然后空格之后把我们的talking给放上就可以了。啊,然后这个头信息去怎么附加,取决于你使用的一些啊请求的工具,比如说阿贾克斯啊,或者这个啊其他的一些啊,再下其他的一些请求工具去附加对应的同信息就可以了,这个加好之后我们再去请求。
27:10
诶是不是就认证通过了,返回到这个用户的信息,对吧?啊,这样就完成了我们的GWT的一个认证。好,其他的功能啊,就是关于这个。啊,这个刷新talking啊,还有这个退出啊,我们再具体去写我们项目的时候再去。完成啊,因为现在主要学的是订购API,然后刚好说到了API认证这一块,我们就要用到这个GW认证,就说一下怎么去配置,怎么去使用。啊,接着往下看一看这个定格API的,这个API的认证,首先在路由上启用这个API的认证的话,我们使用这个api.o的中间就可以了,啊,这个是在全局去启用了,就是整个V1这个版本都用,然后我们是在一个组里面去启用的,当然还可以针对控制器,就是针对某一个方法,或者针对这个控制器啊去使用。
28:04
啊,接下来还有一点就是。我们很多地方。就是要用到。这个登录的这个用户的一个信息怎么办呢。是不是?啊,可以使用什么呀,这里没说啊。就是我们可以从啊用户传的这个talking里面去,就说检索出来用户的一个信息。知道吧。啊,比如说可以使用这个方法啊,它这个also。我们来试一试啊。嗯。还拿什么呢?还拿我们的。啊,这个user方法啊,去进行测试。先把那个猪试掉啊。再写一个啊。
29:02
获取。啊,这个从talking获取用户信息。来可以使用它提供的这个方式啊,我们来一下这个user。看一下啊,我们传的这个token,哎,在这里啊,传的这个token它是怎么给我们解解析出来这个用户信息的。是不是把我们的用户信息给拿到了吧?啊,当然还可以通过什么方式呢?这是第一种啊,还可以使用这个also啊,AU auth,然后这个辅助函数,选择API的这个看守器,直接去里面去获取user。也可以啊,就像我们以前写love的时候,方式是一样的,只不过这里我们指定的这个API,这个看守器。是吧,看一下结果。是不是一样的。
30:04
啊。这里我们滴D了,我们不应该滴D,我们应该return。好啊,通过滴滴会发现他已经拿到了这个用户的信息啊。接着来看啊。结果是不是一样的?啊,这是一种。啊,还有呃,其他的一些方式啊。都可以啊。还有比如说user等于。通过这个also的这个门面函数也行啊。Also的这个factor门面函数,然后选择看手器啊,选择API看守器,然后去拿它的这个user。也行啊,当然没有这个辅助函数简单啊,但是呃,都是可以的啊。接着来试一下啊。是不是一样的。啊。这个是关于。
31:01
这个API认证这一块。啊,包括以及认证之后如何检索这个身份验证后的一个用户。啊。如果我们的控制器里面使用了这个。响应生成器,也就是help可以直接用这个this里面这个dota also也可以啊,我们当然使用了,我们是不是已经使用了这个继承了这个响应生成器,就是我们的控制线,所以还可以怎么去使用,还可以使用这个响应生成器,这个卡号里面提供的这个also也可以。来这种方法也可以啊,所以现在我们至少是好多种方法去拿到已经登录的这个用户的信息啊,注意啊,你一定要传着这个talking才行,你如果你不给talking,他这里是解析不出来这个用户的信息的,知道吧,所以说用户在登录之后,我们一般会把它talking给缓存起来,请求一些需要进行登录认证的接口,就带上这个投屏。关于这个API这块。啊,就说到这里啊。
我来说两句