• gatspy
    2018-07-03
    谢谢波波老师的精彩内容,有个问题请教老师,授权码模式中 “假定资源拥有者和客户在不同的设备上”怎么理解呢?资源拥有者不是授权客户前端渠道后,AS才发放令牌到客户的后端服务吗?这个时候资源拥有者和客户前端渠道是在同一台设备上的吧

    作者回复: 在授权码模式中,这里的客户是指客户端应用,一般在一个Web服务器上,资源拥有者一般使用自己的设备(PC或笔记本或手机),通过客户应用(Web服务器设备)去访问自己在其它服务器上资源。

    
     6
  • libocz
    2019-03-02
    老师能把资源拥有者,客户,公开客户应用,user-agent这4个概念的区分点帮我们指出来吗?实在看的一头雾水

    作者回复: 你好,举个例子,你在github上有一些项目,你就是资源(项目)拥有者(resource owner),你可以利用github提供的开放API开发一个应用,用它可以查看甚至操作你在github上的项目,这个应用叫客户应用(client app)。如果这个应用是一个web应用,它被部署在一个web服务器上,那么它是一个私密应用,在web服务器上可以存储该应用的客户标识+凭证(client id+secret),你需要使用浏览器(user-agent)访问这个应用,但是客户标识+凭证(包括令牌)不会被浏览器看到,所以叫私密应用。如果你开发的应用不是部署在web服务器上的,而是直接加载到用户端浏览器的单页应用,或者无线原生应用,这些应用会直接操作令牌,那么它们被称为公开应用,公开应用只存储客户标识(client id),不能存储客户凭证(client secret),否则会被用户看到可能泄漏,所以叫公开客户应用。另外建议看下OAuth2最简向导ppt:https://github.com/spring2go/oauth2lab/blob/master/ppt/

    
     4
  • 一剑
    2019-09-19
    终于弄明白了客户端的含义,其实就是谁持有令牌,谁就是客户端:比方说服务器渲染的WebApp,从头到尾都是WebApp使用令牌去访问资源服务器;又比如SPA或者原生APP,他们也是使用令牌去访问资源服务器,有同学可能会说SPA也是服务器上加载来的,那为啥不算服务器是客户端?其实服务器只是宿主,浏览器才是程序真正的执行者。不过在现代前后端分离的大趋势下,SPA也并不一定非得使用简化模式,也会充当“User-Agent”的角色,真正的客户端还是服务器,比如典型的案例:微信登录。

    另外有两个问题请教老师:
    1. “根据RFC6749,授权码模式,用户名密码模式和客户端模式,必须传client_id/secret进行客户应用认证。简化模式只需传client_id。”

    问题:公开应用之前说的是不能保存client secret的,然后按照ppt里的选型流程:第一方公开应用(SPA或原生APP)是使用用户名密码模式,如何按照上面这个规则传递client secret呢?如果不传递似乎就无法证明应用的身份

    2. “电商后台web管理系统应该算(只要不是单页应用),如果要访问内部API且内部有OAUTH认证授权服务的话,建议用标准授权码模式。当然视具体情况,企业内部如果安全不严格的话用简化模式或密码模式,甚至不走OAUTH直连API也OK。”

    问题:在现实场景下,一般用户会分多种类型,比如内部员工和外部客户,内外系统都有认证和授权需求,个人感觉OAuth似乎很难同时满足多用户类型的支持,需要分别部署两套OAuth?
    展开

    作者回复: 你好,你学习很仔细,有思考,赞!

    关于第1个问题:第一方公开应用,如果使用用户名密码模式,原生APP是可以把clientId/secret编码在代码里头的,最后编译成二进制,一般不易拿到。如果是SPA,对于无线应用,可以考虑hybrid混合模式,clientId/secret也可以考虑编码在代码里头,如果是纯SPA,为安全考虑,可以考虑服务端配合,相当于一种授权码模式变体。

    实际很多企业的第一方应用,大都采用用户名密码模式,但不是严格OAuth,也就是说clientId/secret都不传递,或者只传一个应用标识,做统计跟踪用。既然是第一方官方应用,一般和官方域名绑定,或者要经过appstore严格审核,很难伪造获利。

    关于问题2:企业分内外客户的话,的确去要考虑部署两套OAuth服务,或者采用支持多租户的OAuth服务(可以参考FusionAuth(fusionauth.io))。

    
     3
  • 布小丫学编程
    2018-05-13
    资源拥有者和用户不是同一个概念吗?能举例说明一下吗?

    作者回复: 可以简单认为是一个概念,资源拥有者是OAuth的术语,假设极客时间开发的app可以支持微信联合登录,你在微信上有用户数据(资源),你就是资源拥有者,可以授权极客时间app去访问你在微信上的数据(联合登录)

    
     3
  • SoulEdge
    2019-08-06
    波波老师的回复率应该是所有课程里最高的,赞一个

    作者回复: 谢谢支持!加油!

    
     2
  • 凯文1985
    2018-08-04
    还是不是很理解,如果app是第三方开发的 然后选取了authorization code的实现方式 那么第三方的app 也是拿到了authorization code 用来获取下一步的access token,那么这样的方式不也是不安全的吗 第三方app可以拿着authorization code做任意事情?

    作者回复: authcode只能用来换取对应的那个token,不能干其它事情,而且有时效性。

    
     2
  • 载曜之始
    2018-06-06
    老师,单页应用是指spa(single page application),也就是利用html5,ajax和后台server交互?有后台服务器的话,是不是也应该是走授权码模式?

    作者回复: 单页是指纯静态,js/html/逻辑都跑在客户端agent(如浏览器中),后台服务器只做静态资源的hosting,无逻辑。凡后台服务器端有计算逻辑的,即使前端页面用ajax,也应该考虑走授权码模式。

    
     2
  • duer
    2018-05-11
    谢谢老师,不知道视频的录制最大音量可否调大一些,在地铁上用耳机都有点儿听不清了。最好和音频产品的一样大,谢谢

    作者回复: 谢谢建议🌹已经反馈极客时间

    
     2
  • 米斯特.杜
    2019-12-19
    听了好几遍课又看了大家的留言,感觉大家被老师的各种专业术语给搞晕菜了。如果可能老师可以在课程开始补充一些专业术语的白话解释。

    作者回复: 你好,oauth2本身就有很多术语,本课也已经花了很多篇幅来解释其中的术语,建议多看看几遍视频和相关文档,进一步消化。

    另外,前面有一节白话OAuth2,这个比较简单,可做入门学习。

    
     1
  • 丁文波
    2019-12-06
    我现在工作的单位,实际场景和需求是:几个服务器,但这几个服务器登录不要互通,只想新增一个认证授权服务器,这几个服务器都通过一个认证服务器完成登录授权操作,我看了oauth的视频,但有些疑惑,用户信息是存到认证服务器上吗?其它服务器也会用到用户信息,需要也存一份吗?怎么设计这个认证授权服务

    作者回复: 有两种设计:

    一种是用户信息集中存在认证服务器上,其它服务器通过认证服务集中登录,后面需要用户数据的话,则拿令牌集中到认证服务器上去查用户数据。

    另外一种做法是认证服务器上只存一个账户id(用户注册时建立),具体用户信息,各个业务应用根据需要自己存一份,但是表中要记录用户和账户id的关联,这样通过认证服务器登录后,可以获取到账户id,然后通过账户id去查各自的用户数据。

    
     1
  • 杨杰
    2019-06-03
    杨波老师,我的问题是在生产环境进行认证的过程中一般什么时候需要传入“client_secret” 这个参数?有没有什么场景是必须(或建议)传入这个参数的?前面的问题我表述的可能不太清楚。

    作者回复: 根据RFC6749,授权码模式,用户名密码模式和客户端模式,必须传client_id/secret进行客户应用认证。简化模式只需传client_id。

    
     1
  • 杨杰
    2019-06-03
    client secret 的主要有哪些应用场景,在哪些场景是下是必须的或推荐使用的,哪些场景下可选的?

    作者回复: Client Credentials Grant是机器对机器调用的场景,没有人参与的,比如某个job任务要定期调用某个服务,这个动作是异步周期执行,没有人参与,如果安全要求严格,那么可以考虑这种客户端模式。不过,实际企业中,机器间调用一般可以直接调用,安全性通过生产网段隔离保证,所以这种模式其实用得并不多。

    
     1
  • 念
    2019-02-19
    token保存在cookie中后不算在浏览器中吗老师,有点不太理解token只在服务器间传递这个概念

    作者回复: 如果是使用简化模式或者用户名密码模式的单页应用,token是可以存在浏览器cookie中的,这种方式安全性低,一般只用在安全不严格场合。如果是授权码模式的Web应用,则token只会在服务器之间流转,不会跑到浏览器中。

    
     1
  • 西兹兹
    2018-12-13
    “在相同设备上”,这个“设备”是指什么?
    是手机上的APP? 还是一台资源服务器? 还是一个Web网页?

    作者回复: 用户名密码模式常用在第一方无线native应用场景中,“在相同设备上”的设备可简单理解为比如在手机等设备上,这时资源拥有者持有手机,客户(无线)应用也安装在手机设备上。

    
     1
  • immacoto
    2018-11-07
    请问老师 在授权码的情况下 令牌不会流经客户端浏览器 客户端像资源服务器发送授权码 资源服务器与认证服务器交互换取令牌然后访问资源
    但是连续两次从客户端访问资源浏览器的时候 是什么流程呢 如果不是每次都换取令牌的话 令牌会存在哪里呢 如果是以前的有态服务 令牌或许可以保存在会话里(session)但是如果是无态的是否还是要保存在客户端呢 这又与令牌不停留客户端矛盾了 真想不通 请老师点播下 谢谢

    作者回复: 在授权码模式下,浏览器,客户端(一般是web app),授权服务器和资源服务器是4个不同概念。流程最后客户端会去授权服务器获取令牌,可以存在db或redis等存储中。令牌不会经过去浏览器。可参考lab02。

    
     1
  • 卡西米
    2018-10-09
    写的不错

    作者回复: 谢谢支持🌹

    
     1
  • 。。。。
    2018-09-14
    请问既有app也有单页面,那是要开发两套一个简易一个授权码模式吗?不能直接用一种授权码模式吗?

    作者回复: 一般授权服务器(比如spring security oauth2和keycloak等)都支持典型的4种oauth2 flow,你根据应用场景选择接入即可。授权码主要用于webapp和第三方原生app。

    
     1
  • zhaoni
    2018-06-12
    波波老师,请问图中机器的定义是什么,是否指直接由服务端发起请求,拿到accesstoken的机器?和web服务端应用的区别是什么?感觉机器和web服务端应用貌似是同一个概念,请教了。

    作者回复: 机器那个没有resource owner也就是人的参与,机器自动直接获取token,web服务端应用有人参与。

    
     1
  • Asanz
    2018-05-30
    授权码模式中“令牌不会传递经过user-agent”作何理解?

    作者回复: 令牌只在授权服务器和Web服务器之间传递,不会跑到用户端浏览器中

    
     1
  • bryan
    2018-05-28
    请问下杨老师,web服务器端应用指的是哪些?电商的后台web管理系统是web服务器端应用么?也是用授权码模式么?

    作者回复: web服务器端应用比方说就是我们常见的java或.net开发的MVC应用,和单页应用不同,web mvc应用是有服务器端展示和业务逻辑的。电商后台web管理系统应该算(只要不是单页应用),如果要访问内部API且内部有OAUTH认证授权服务的话,建议用标准授权码模式。当然视具体情况,企业内部如果安全不严格的话用简化模式或密码模式,甚至不走OAUTH直连API也OK。

    
     1
我们在线,来聊聊吧