最近一直有同学在问,OAuth2密码模式为啥Spring Security还没有实现,就连新的Spring Authorization Server也没有这个玩意儿。

其实这里可以告诉大家,OAuth2密码模式废了,OAuth2 安全指南相关的章节。以后新的OAuth2实现基本不太会可能积极去适配这个模式了。诸如Auth0JIRA等知名产品都已经在产品中移除了该模式。用的好好的为什么要移除呢?胖哥找了一些资料,大致上有几点。

OAuth2是一个授权框架

OAuth2本身是一个授权框架,它并没有对用户的认证流程做出定义。它的初衷是解决不同服务之间的授权访问问题,它无法明确你认为正确的接收者就是那个接收者。目前只有OAuth2的扩展协议OIDC 1.0才具有用户认证功能。

密码模式更像一种兼容性的协议

密码模式诞生的时候,像ReactVue这种单页应用还没有兴起,甚至连框架都还没有呢。它更像一种为了解决遗留问题而采用的过渡方案。在传统应用中,用户习惯了把密码直接交给客户端换取资源访问权限,而不是跳来跳去拉授权、确认授权。OAuth2诞生之时为了让用户从传统思维中慢慢转变过来就设计了这种模式。

这种模式好用,但它打破了委托授权的模式,降低了OAuth2的安全性。

它的流程非常像“网络钓鱼攻击”,想象一下应用程序随意的让你在一个平台的登录页面中输入另一个平台的密码,如果两个平台都是可信的,这样做也无可厚非。但是它真的可信吗?没人敢打包票。

对于安全而言,这扩大了密码暴露的面积,密码总是被提示小心保管避免泄露,这妥妥是一种反密码模式。用户密码可能有意无意就在这个链路中泄露出去了。而且用户无法控制授权的范围,虽然用户限制了scope,但是客户端程序依然提供了编程机会来打破用户的scope。如果在公共OAuth2客户端上使用密码模式,你的令牌端点也可能会被嗅探到,进而被暴力穷举。

因此在OAuth2最佳实践中已经明确要求不能使用这种模式,甚至在声明中用了MUST NOT BE这个字眼。

替代品是什么?

OAuth2.1中,已经仅仅只有这三种

  • Authorization Code+ PKCE 如果你需要安全授权请使用这种模式。
  • Client Credentials 如果你的客户端需要同其它客户端进行资源交互请使用这种模式
  • Device Code 如果你正在开发的IoT应用想使用OAuth2,可以考虑这种模式。

相比较而言,OAuth2.1更加注重安全性,目前正在起草阶段。

那如果我还是需要进行用户认证呢?目前只有OIDC 1.0可选了。所以各位同学,未来的方向应该明确了吧,密码模式是应该被放弃的时候了。

关注公众号:Felordcn 获取更多资讯

个人博客:https://felord.cn

被广泛使用的OAuth2.0的密码模式已经废了,放弃吧的更多相关文章

  1. IdentityServer4实现OAuth2.0四种模式之客户端模式

    一,准备内容 IdentityServer4 是Asp.net core的一个中间件,用于添加符合OpenId Connect和OAuth2.0规范的终端到Asp.net Core应用.在这里简单介绍 ...

  2. IdentityServer4 实现OAuth2.0四种模式之密码模式

    接上一篇:IdentityServer4 实现OAuth2.0四种模式之客户端模式,这一篇讲IdentityServer4 使用密码模式保护API访问. 一,IdentityServer配置 1,添加 ...

  3. IdentityServer4实现Oauth2.0四种模式之隐藏模式

      接上一篇:IdentityServer4实现OAuth2.0四种模式之密码模式,密码模式将用户的密码暴露给了客户端,这无疑是不安全的,隐藏模式可以解决这个问题,由用户自己在IdentityServ ...

  4. IdentityServer4实现OAuth2.0四种模式之授权码模式

    接上一篇:IdentityServer4实现OAuth2.0四种模式之隐藏模式 授权码模式隐藏码模式最大不同是授权码模式不直接返回token,而是先返回一个授权码,然后再根据这个授权码去请求token ...

  5. asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)

    asp.net权限认证系列 asp.net权限认证:Forms认证 asp.net权限认证:HTTP基本认证(http basic) asp.net权限认证:Windows认证 asp.net权限认证 ...

  6. ASP.NET Core实现OAuth2.0的AuthorizationCode模式

    前言 在上一篇中实现了resource owner password credentials和client credentials模式:http://www.cnblogs.com/skig/p/60 ...

  7. 接口测试工具-Jmeter使用笔记(八:模拟OAuth2.0协议简化模式的请求)

    背景 博主的主要工作是测试API,目前已经用Jmeter+Jenkins实现了项目中的接口自动化测试流程.但是马上要接手的项目,API应用的是OAuth2.0协议授权,并且采用的是简化模式(impli ...

  8. OAuth2.0授权码模式

    OAuth2.0简单说就是一种授权的协议,OAuth2.0在客户端与服务提供商之间,设置了一个授权层(authorization layer).客户端不能直接登录服务提供商,只能登录授权层,以此将用户 ...

  9. OAuth2.0授权码模式实战

    OAuth2.0是目前比较流行的一种开源授权协议,可以用来授权第三方应用,允许在不将用户名和密码提供给第三方应用的情况下获取一定的用户资源,目前很多网站或APP基于微信或QQ的第三方登录方式都是基于O ...

随机推荐

  1. C 字符串奇数位小写字母转大写

    如题 C实现 #include<stdio.h> #include<string.h> #define COUNT 20 //最大接受字符串数,可以使用动态获取空间函数优化 v ...

  2. php include,require,include_once,require_once 的区别

    include(),require(),include_once(),require_once()作用都是包含并运行指定文件,但是使用场景又有很大区别. 1.include()和require()的区 ...

  3. Tomcat 下载安装,启动,停止,注册服务,开机自启

    感谢大佬:https://blog.csdn.net/wangmx1993328/article/details/81013715 目录 Tomcat 下载 startup.bat 启动 Tomcat ...

  4. Java线程--CompletionService使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11871911.html Java线程--CompletionService使用 public ...

  5. ListIterator特有的方法

    import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /* 迭代 listIterator ...

  6. Apache Http Server与Tomcat6 的负载均衡(二)

    一般来说,实现Apache与Tomcat6的负载均衡有两种方式,一种是使用mod_jk,另一种是使用mod_proxy模块.本文只讨论mod_jk方式. 无论使用哪种方式,一般都要经过以下这几个步骤( ...

  7. [杭电新生赛]hgame-week1-web-wp

    hgame第一周总结 (官方wp更加简洁明了.直入主题,个人比较菜,所以过程繁琐 写好了一直没发qwq(就是懒(bushi) 一.Tetris plus! 题目里说玩到3000分就给flag,还真有点 ...

  8. LeetCode随缘刷题之赎金信

    欢迎评论区讨论. package leetcode.day_12_04; /** * 为了不在赎金信中暴露字迹,从杂志上搜索各个需要的字母,组成单词来表达意思. * * 给你一个赎金信 (ransom ...

  9. Ubuntu - root, sudo, su, passwd

    1.rootubuntu中默认是不使用root账户的,当然也是可以开启并设置为默认登录账户的,但ubuntu不建议使用而已,毕竟root账户拥有所有权限,可能会出现一些误操作之类.在普通账户中,如果遇 ...

  10. Rock Pi开发笔记(二):入手Rock Pi 4B plus(基于瑞星微RK3399)板子并制作系统运行

    前言   入手rock pi 4b plus板子,查看具体的实物,然后制作系统,刷系统,让摇滚派的ubuntu系统运行起来.   Rock Pi 4B plus 介绍   ROCK Pi 4 是 Ra ...