产品是做网站,网站流量运营,郑州最新消息今天,WordPress多站點支付插件前言接着IdentityServer4的授权模式继续聊#xff0c;这篇来说说 Resource Owner Password Credentials授权模式#xff0c;这种模式在实际应用场景中使用的并不多#xff0c;只怪其太开放啦#xff0c;直接在客户端上拿着用户名和密码就去授权服务器获取AccessToken#… 前言接着IdentityServer4的授权模式继续聊这篇来说说 Resource Owner Password Credentials授权模式这种模式在实际应用场景中使用的并不多只怪其太开放啦直接在客户端上拿着用户名和密码就去授权服务器获取AccessToken这样容易被客户端拿着用户名和密码搞坏事接下来就详细说说。正文Resource Owner Password Credentials授权模式与上一节说到的客户端凭据模式不同这是有用户参与的用户就是资源拥有者通过允许在客户端使用用户名和密码的方式向授权服务器获取AccessTokenAccessToken和用户相关即不同的用户获取到的AccessToken不一样。术语解释Resource Owner资源所有者即拥有资源的用户绝大对数小伙伴都应该有自己的QQ如果没特殊情况相信每一个小伙伴的QQ空间中都有自己曾经觉得很酷或很有纪念意义的照片这里的照片就是资源而小伙伴就是资源所有者。QQ服务器就是资源服务器。Resource Owner Password Credentials 流程流程简要说明首先用户和客户端需要提前在授权服务器上备案过的用户没有备案在资源服务器肯定就没有对应的资源客户端没有备案就不能随意去授权服务器获取AccessToken用户在客户端上输入用户名和密码并带上备案过的客户端凭据一起请求授权服务器获取AccessToken;授权服务器验证用户凭据和客户端凭据成功之后直接返回代表该用户的AccessToken用户在操作时带上AccessToken访问资源服务器资源服务器正常返回结果如果没有AccessToken是不能访问受保护资源的结合流程看看代码如何实现步伐跟上哦这里资源服务器和授权服务器就拷贝之前客户端模式的代码(这样每种模式的代码区分开方便查看)在原有基础上修改代码即可代码地址https://github.com/zyq025/IDS4Demo在原有的授权服务器上增加代码模拟在授权服务器中备案用户方便测试效果就在内存中模拟备案新的客户端指定其授权方式好啦到这授权服务器的修改就完成啦用postman先测试一下授权服务器修改完啦资源服务器不用动那就到客户端啦新建一个Winform窗体程序简单布局安排上并引入IdentityModel包编写获取AccessToken逻辑在GetAccessToken按钮点击事件中增加代码如下先启动授权服务器看看access_token运行效果如下获取到AccessToken之后就可以访问受保护的API啦在调用API按钮点击事件中进行逻辑编写如下授权服务器、资源服务器、客户端启动运行看效果如下以上就是Resource Owner Password Credentials的使用流程是不是很简单。接下来聊聊这种模式的其他话题Resource Owner Password Credentials的尴尬之处在oauth2.0中如果使用这种模式规定是不允许客户端存储资源所有者的用户名和密码的但如果是第三方客户端想搞事情就把用户信息先存一把这样就导致间接泄露用户信息的风险很高(如果第三方客户端被攻击了)这也是这种模式在实际应用场景使用比较少的原因如果有其他模式选择不建议使用此模式通常以下情况可以考虑使用客户端是可高度信任的且安全性要有保障遗留应用没有其他好的解决方案可以使用有用户参与获取的accessToken和客户端凭据获取到的有什么区别之前客户端凭据模式的截图资源所有者密码模式的截图小伙伴肯定看出来不止多一个但其中比较重要的就是sub这个claim如果sub存在调用API的access_token就能区分是代表用户的否则就是代表客户端的。即有用户参与获取的acess_token是代表用户的每个用户的token都不一样。refresh_token得补上refresh_token是为了给access_token进行延长有效期而存在的为了安全和降低风险access_token的有效期一般设置的比较短通常会是两个小时(根据需要设置)当access_token失效时常规的做法就是让其跳转到登录页重新登录获取这样频繁的跳转到登录页用户体验及其不好为避免这种情况需对access_token进行在线续命即延长有效期实现的方案各种各样比如有在前端定时检测的也有在后端做有效判断的但用的相对比较多还是使用refresh_token的形式当access_token失效时会采用refresh_token去请求新的access_token保证用户正常操作。如果需要在获取access_token的时候同时返回refresh_token需要在授权服务器上备案客户端时将AllowOfflineAccess设置为true如下所示refresh_token具体使用在后续的案例单独说吧。总结关于Resource Owner Password Credentials 就简单说这么多主要是看看如何使用相信小伙伴在新的项目中应该会很少用到毕竟拿着用户名和密码直接在第三方客户端搞事情始终还是有风险下一篇说说Implicit(简化模式)。源码地址https://github.com/zyq025/IDS4Demo一个被程序搞丑的帅小伙关注Code综艺圈跟我一起学~