我们希望使用OAuth2保护公共API。
我一直在阅读规范/文档,但我仍然对隐式授权有一些疑问。
我理解隐式授权仅用于仅限客户端的浏览器(javascript)-apps。它不太安全,因此应该限制可能性(例如只读访问)。此外,不应发出刷新令牌,令牌不应长久。
但是什么阻止了in-browser-(js)-app的创建者使用Authz授权而不是隐式授权?作为这样一个应用程序的创建者,有一个好处,我可以获得更多权限(破坏性)的东西,并获得一个刷新令牌,我可以使用它来获取新的access_tokens过期。后者是理想的,因为我不必经常错误地登录用户。
这当然有问题,因为refresh_token,client_id和client_secret很容易受到影响。
所以这个问题基本上围绕着这个问题: 如何确保仅在浏览器中的应用程序仅使用受限制的隐式授权?
在能够使用OAuth连接到我们的api之前,客户端/开发人员必须注册client_id,callback_url,client_secret。如果我发现这种行为,我(作为api所有者)可以撤销此权限。但这意味着我必须手动检查所有内容,并定期检查?
有更好的方法吗?
答案 0 :(得分:0)
一种选择是依赖于用户代理标头,因为客户端Web应用程序无法影响它(这是发送请求的浏览器!)
如果cliend_id和client_secrets与来自浏览器的用户代理结合使用,您可以考虑拒绝发出令牌。您可以将client_id与浏览器的用户代理结合使用,但在这种情况下不要发出refresh_token并使用较短的access_token到期时间。 (不确定这是否仍然在技术上符合OIDC)
答案 1 :(得分:0)
我见过的OAuth2库通常允许配置给定客户端可用的访问授权类型。这里的解决方案是限制客户端仅使用隐式(并禁止授权代码)。