不要使用Resource Owner Password Credentials (2)

因为用户体验。不要因为你想自定义你的登录页在自己的应用上就使用这种类型。因为有其他出于安全角度的考虑。通常情况下,我们使用google或者ms的应用的时候,是直接保存应用页面并不是登录页面。

如果我还不能说服你

如果你还是想用这种granttype,请至少考虑以下的几点

加固token endpoint

因为ROPC需要直接访问token endpoint(获取token),攻击者会特别关注这个地址,所以,你需要实现一些类似请求拒绝,防止恶意尝试的策略。

理想状况下token endpoint一般不应该被这种事情所打扰,所以,默认的OAuth或者OpenID Connect Provider都不会去实现这种功能。

使用ROPC和SPA

SPA作为一种常见的客户端的程序,一般不保存secret,所以少了很大一部分的安全保护。如果你要在客户端保存secret,这是一种妥协策略。

ROPC本身是允许refresh token的,所以需要在server端禁用offline_access,不让SPA来刷新token。每次都要获取新的token。

最后的一些想法

我只有在两种情况会同意使用ROPC。

在不需要浏览器的情况下,比如apple tv。

需要把一个2000年之前的老应用迁移过来。但其实我也曾经在一个vb.net的webform集成了IdentityServer,所以,我可能也不是很建议你使用。

最后说两点。

如果你的应用是基于浏览器的客户端应用,试试 Implicit。

如果你的是原生应用,试试Authorization Code。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpjfxd.html