9

使用 OAuth,ClientID 和 redirect_url 有很强的联系:您需要为每个 redirect_url 设置一个单独的 ClientID。对于在多个域中具有多个部署的本地应用程序来说,这是一个问题。

有什么方法可以实现来自未知域的 OAuth 身份验证?我能想出的唯一替代方案需要在固定域中使用专用的“身份验证服务器”,该服务器可以用作 redirect_url,然后可以执行新的、不受限制的重定向到客户域。

桌面应用程序通过提供一个虚拟的 redirect_url 来解决这个问题,然后将实时身份验证窗口托管在一个专用的 Web 框架中,让它们可以监听重定向请求。这允许他们从重定向 URL 读取授权代码,即使 URL 本身无效。我相信由于跨域限制,这在网络浏览器中是不可能的。

基本上需要 OAuth 来支持本地 Web 应用程序中的 SkyDrive 发布。

4

1 回答 1

1

RFC 6749 (OAuth 2.0) 规定,授权服务器必须要求将 redirect_uri 预先注册为Public Clients而不是Confidential Clients,只要它们不使用隐式授权。根据您是在安装过程中提供客户端凭据还是系统管理员输入他们自己的客户端凭据,您的系统最终会分为不同的类别。然而,RFC 建议始终需要预先注册的 redirect_uri,因此您很可能在任一分类中都遇到相同的问题。

我想说对您来说唯一可行的解​​决方案是要求系统的系统管理员在配置系统时提供他们自己的客户端凭据。如果他们提供自己的客户端凭据,他们还需要向授权服务器注册自己的 redirect_uri,从而解决了问题。

您不应该实现中间身份验证服务器,因为这会打开应用程序的安全性。如果用户授权您的系统的一次安装,他们将自动授权所有安装,这反过来又可以将他们的个人数据提供给其他组织,而不是他们授权的组织。

于 2016-01-05T22:11:15.067 回答