我正在尝试构建一个 OAuth2提供商,它不需要任何秘密令牌或 url_redirect 白名单。< / p>
以下是这个想法:
这样,我们确信令牌将始终保持在同一个域中。不需要密钥。我的架构中有缺陷吗?
答案 0 :(得分:1)
如果您使用的是隐式流,那么您的方案没有任何缺点:client_secret
无论如何对隐式流都没有意义。
如果是授权代码流,client_secret
会提供一个额外的目的,这个目的不在您的方案中:它会阻止桌面应用程序冒充其他应用程序。在浏览器中,您的方案将起作用,因为浏览器强制执行URL检查(在postMessage中,或通过重定向),但是可以构建一个桌面应用程序或shell脚本,假装是client_id = x,获取授权代码和然后交换它以访问令牌。 client_secret
阻止了这一点。
另请注意,在iframe中显示登录屏幕也是一个安全问题:其他应用程序可能会模拟您的iframe并捕获用户凭据,而无需用户注意到。