当你咨询别人自己是否需要用ROPC这种grant type,标准的答案肯定是“不一定”。当然这个答案是正确的。但是我的观点是“不”。 下面我们来看看ROPC这种类型,为什么他这么有诱导性,同时我们能做什么来说服别人不要使用这个type这个观点。 为什么ROPC存在 ROPC适合的场景是这样的:用户信任client(client就是需要访问用户个人信息的程序),这种client可能是一些高权限的应用。授权服务器应该特别关注这种情况。 —引用自https://tools.ietf.org/html/rfc6749#section-4.3 这是ROPC的另一个用途。老系统的迁移。 当使用了ROPC,就没有办法知道用户是否真正的发起了请求。ROPC不是一种认证方式。 同时,这种方式在引导你的用户养成一个坏的习惯。他很像一种网络欺骗攻击。
func deepcoper(op Operator) Operator { rt := reflect.TypeOf(op) rtype := deRefType(rt) ropc := reflect.New (rtype) // 3.2 使用反射 call method 初始化 method := ropc.MethodByName("SetDefaults") if method.IsValid( method.IsZero() { method.Call(nil) } opc := ropc.Interface() return opc.
ROPC这个流程违背了OAuth的目的之一,即用户必须将其凭据交给应用程序客户端,因此无法控制客户端如何使用它。如果可以使用其他流程,则不建议使用该流。它只在规范中指定以便处理遗留或迁移系统的案例。 使用ROPC时必须小心谨慎。一个例子可以是企业级桌面应用程序,这类应用不经常更新,但仍需要访问API平台。 而ROPC要求你在客户端中输入个人信息,从而可能带来用户隐私的泄漏。 所谓遗留系统的应用场景,比较典型的是你升级后端API服务的验证架构,在不改动旧版客户端的情况下,使用用户名和密码来获得令牌是最方便的,此时就需要使用ROPC方式。 ? ROPC:客户端将用户凭据连同自己的凭据一起发送。
out.json 禁用颜色高亮显示: python3 azurenum.py -nc 使用自定义User-Agent运行工具: python3 azurenum.py -ua "My-UA" 使用ROPC
资源拥有者密码凭证 Resource owner password credentials (ROPC): 资源拥有者密码凭证(如用户名和密码)可被直接作为授权许可以获取访问令牌。 ROPC 只应被使用在资源拥有者和客户端(如客户端是所在设备操作系统的一部分,或是一个高权限的应用)之间需要高信任等级,且其他几种授权许可(如授权代码)不可用的时候。
'refresh_token': tokens['refresh_token'],'captured_at': datetime.utcnow()})上述伪代码展示了攻击者如何利用资源所有者密码凭证(ROPC
# 下载ROPEmporium挑战 wget https://ropemporium.com/binary/ret2win.zip unzip ret2win.zip 6.3.2 ROPC框架 ROPC