作者回复: 嗯,你看得很仔细,视频中我的确之前登录过,浏览器记住了,所以直接到授权页面,按标准简化模式是需用户登录的,谢谢提醒!
作者回复: SAML和kerberos我也没有直接经验,SAML和OAuth类似,Web时代的一种认证授权标准协议,以xml格式交换数据,比OAuth重,目前还有很多企业在用SAML,OAuth是当前行业主流。
作者回复: 单页应用,对外安全不太敏感场景,或企业内安全不严格场景
作者回复: 授权服务器和资源服务器住在一起,则通过共享存储(db or in memory)方式实现令牌校验。请使用spring boot 1.x完成实验,2.x还没验证过。
作者回复: 如果只是实现简单的oauth2授权服务,理解清楚RFC6749就可以实现,本课程后面有一个章,演示基于golang的简单oauth2服务器实现。 如果要实现企业级的oauth/oidc服务,可以参考ory的hydra(https://github.com/ory/hydra) 还有一个不错的项目fusionauth(https://fusionauth.io/)你也可以研究,它是一个企业级的identity and access management服务器,支持用户数据管理/多因素认证/SSO等功能,也是基于oauth2实现,不过它是免费但是不开源。
作者回复: 简化模式获取token之前,用户需要先认证,上面的提示说你没有经过认证。请按照实验的步骤,在application.properties里头配置一个账户密码,然后把浏览器缓存清空一下,浏览器再试,会要求你输入账户密码进行认证。我这边重复做这个实验是OK,其它很多学员也做过这个实验也是OK。
作者回复: 在RFC6749的简化模式中,这个redirect_uri是optional的,参考: https://tools.ietf.org/html/rfc6749#section-4.2 加的话可以作为多一层的安全校验,防止恶意请求。
作者回复: 谢谢你的提醒!
作者回复: 你好,简化模式不安全主要就是你理解的两点: 1,token对浏览器可见, 2,获取令牌时只传clientId,没有经过clientSecret校验。 一般简化模式仅适用于安全不严格的应用场景。 密码模式在开放平台场景下同样也不安全,但是第一方受信认应用场景是可以的,例如,很多公司为自己开发的无线app使用密码模式。 简化模式的令牌解析过程,请参考官方RFC6749文档,4.2节Implicit Grant讲得很清楚,C步骤授权服务器会向浏览器发送重定向指令,重定向地址带#令牌,然后D步骤浏览器根据重定向指令向静态资源服务器(Web Hosted Client Resource)请求静态资源(注意这步#后面的令牌仅留在浏览器端,不会被发送到静态资源服务器),这个静态资源里头含有脚本script,这个脚本在E步骤到达浏览器后可以读取浏览器地址#后面的令牌,这就相当于是一个解析过程。Lab05的Angularjs单页应用实验,代码里头其实有这样一个解析过程。
作者回复: 简化模式也是需要用户认证的,输入用户名密码即可,配在application.properties文件里头