当我们在OIDC中使用授权代码流时,我转到/authorization,然后它将我重定向到OIDC提供者的登录页面。在这个登录页面上有一些像redirectUrl查询字符串,它包含链接到/授权与参数,如client_id,状态,code_challenge等。当我写OIDC服务器,我应该担心这一点,这些参数可以改变,而用户是在登录页面(例如通过浏览器中的恶意扩展)?也许我应该保存这些参数在httponly,安全cookie后GET请求登录页面?
当我在编写OIDC服务器时,我应该担心这一点吗用户是在登录页面(例如通过浏览器中的恶意扩展)?也许我应该保存这些参数在httponly,安全cookie后GET请求登录页面?
将/authorize
参数隐藏在用户视线之外并不能保护它们免受man-in-the-browser[1]攻击者的攻击,攻击者无论如何都可以访问这些数据。
OIDC规范允许通过JWT令牌传递请求,这些令牌可以可选地签名甚至加密,这应该在考虑的情况下提供额外的安全级别[2,3]。
作为IDP,您可以通过合并带外事务验证来保护您的用户[1],如果用户知道请求的登录事务,可能会推断出在他/她的行为上正在进行额外的事务,确认消息在身份验证流中丢失。
另外,IDP实例应该保护自己不受未授权方注册服务的影响,以防止攻击者创建钓鱼网站,假装使用合法IDP提供合法服务。/authorize
请求包含服务凭证(客户端id,客户端秘密),必须由IDP正确验证。
对于更实际的阐述,我推荐pentesterlab.com,其中身份验证/授权徽章练习系列将允许您学习和练习对OAuth和OIDC协议的几种攻击实现。
- [1] https://en.wikipedia.org/wiki/Man-in-the-browser
- [2] https://openid.net/specs/openid-connect-core-1_0.html JWTRequests
- [3] https://openid.net/specs/openid-connect-core-1_0.html RequestDisclosure
- [4] https://pentesterlab.com/badges/auth