OAuth2没有秘密

时间:2015-09-15 10:18:01

标签: oauth

我正在尝试构建一个 OAuth2提供商,它不需要任何秘密令牌 url_redirect 白名单。< / p>

以下是这个想法:

  • 您复制粘贴网站上的按钮
  • 提供商(我们)用户进行身份验证,并在我们的数据库中为他提供身份验证令牌,链接到 HTTP_REFERER 使用window.postMessage将令牌发送回父窗口。)。
  • 网站提供商(我们)询问用户信息 referer_origin 作为参数。

这样,我们确信令牌将始终保持在同一个域中。不需要密钥。我的架构中有缺陷吗?

1 个答案:

答案 0 :(得分:1)

如果您使用的是隐式流,那么您的方案没有任何缺点:client_secret无论如何对隐式流都没有意义。

如果是授权代码流client_secret会提供一个额外的目的,这个目的不在您的方案中:它会阻止桌面应用程序冒充其他应用程序。在浏览器中,您的方案将起作用,因为浏览器强制执行URL检查(在postMessage中,或通过重定向),但是可以构建一个桌面应用程序或shell脚本,假装是client_id = x,获取授权代码和然后交换它以访问令牌。 client_secret阻止了这一点。

另请注意,在iframe中显示登录屏幕也是一个安全问题:其他应用程序可能会模拟您的iframe并捕获用户凭据,而无需用户注意到。