【问题标题】:Support for multiple domains/subdomains in OneDrive File Picker for Web Apps支持 OneDrive File Picker for Web Apps 中的多个域/子域
【发布时间】:2014-06-25 04:25:47
【问题描述】:

我们的 CMS 为 2000 多个学校网站提供支持。每个网站的管理站点都在同一个根域下,例如*.myadmin.com。我们正在努力将OneDrive File Picker 集成到所有这些管理站点的多个页面上。

API 设置中的Redirect URLs 存在问题。我们尝试通过将Redirect URLs: 设置为https://myadmin.com 来将Root domain 字段设置为myadmin.com。在 JavaScript 中,我们像这样初始化文件选择器:

WL.init({
    client_id: window.OneDrive.clientId,
    redirect_uri: ''
});
WL.fileDialog({
    mode: "open",
    select: "single"
});

这会导致一个弹出窗口显示:

We're unable to complete your request. Microsoft account is experiencing technical problems. Please try again later.

在弹窗的地址栏中,还有一个错误描述(url解码):

error_description=The provided value for the input parameter 'redirect_uri' is not valid. The expected value is 'https://login.live.com/oauth20_desktop.srf' or a URL which matches the redirect URI registered for this client application.

在 API 设置中放置一个特定的 url,例如 https://subdomain.myadmin.com/homepage,将使选取器在 那个 特定页面上工作,而不是在其他页面上工作。看起来它正在寻找一个精确的匹配。显然,我们为每个使用 OneDrive 的页面创建一个单独的应用程序是不切实际的。

可以通过在 API 设置页面上禁用 Enhanced redirection security 来解决此问题。几周前,当我们创建一个用于开发的应用程序时,该选项存在,但被标记为已弃用。今天,当我们为生产创建一个新应用程序时,它已经不存在了,我认为它现在已为所有新应用程序启用。

我们在使用 Dropbox Drop-ins Chooser 时遇到了类似的问题,但我们能够通过将 myadmin.com 设置为应用的域来解决该问题。

有没有办法解决这个问题?

感谢您的帮助和建议。

【问题讨论】:

  • 你能通过一个租户数据库来解决这个问题吗?该数据库将按帐户存储重定向 url?
  • @AlexandreSantos 你能详细解释一下吗?我不太明白。您的意思是在数据库中存储所有可能的重定向网址吗?谢谢。
  • 添加此请求以使其可用于动态创建的域:onedrive.uservoice.com/forums/262982-onedrive/suggestions/… 如果您对此功能感兴趣,请加入我的请求。

标签: onedrive


【解决方案1】:

我可以让它工作的唯一方法是

  1. 确保单个域上的确切单个网页已配置并适用于一个驱动器(运行 OneDrive 的 url 需要在 Microsoft account Developer Center 中正确配置
  2. 然后在 iframe 中使用此页面(即使它是完全不同的域)
  3. 然后使用 postMessage 将数据传回父 iframe 以使用

工作副本(链接可能随时删除) Testing OneDrive in an iframe

其他相关网址

  1. browser support for postMessage
  2. Browser support for postMessage on stackoverflow
  3. postMessage documentation

postMessage 的一些示例用法

  1. example usage of postMessage
  2. another example of use of postMessage

【讨论】:

  • 感谢您的建议;我已经为 Google Drive 实现了相同的模式,并试图为 One Drive 做同样的事情。不幸的是,我发生了错误(请参阅my question - 你看到了吗?或者你对如何解决该错误有任何想法?
【解决方案2】:

您可以添加多个重定向 URL,只要它们都在同一个子域中。每个重定向 URL 都需要明确指定:

【讨论】:

  • 请注意,页面当前存在一个错误,导致其无法正常工作:social.msdn.microsoft.com/Forums/en-US/…。修复后,上述内容应该可以解决您的情况。
  • 谢谢!这是否意味着我们仍然必须明确地为每个子域输入 url?还有另一种情况,我们在 url 中有资源 id,比如https://subdomain.myadmin.com/homework/12345/edit,这使得我们无法明确指定每个 url。我想知道是否有满足我们需求的解决方案。再次感谢。
  • 是的,您必须明确输入您将重定向回的每个 URL,其中包括每个子域。
  • 这仍然不能解决我们的问题。但我想这就是目前的情况。我们能够相当容易地集成 Dropbox 和 Google Drive。 Dropbox 只需要指定根域; Google Drive 需要做更多的工作,但它的 File Picker UI 可以使用访问令牌进行初始化。我期待 OneDrive 的未来更新,使其更易于集成。
  • 一种选择是拥有一个重定向 URL/页面,然后使用 OAuth 状态参数进行进一步处理。我相信当前的实现是为了增强安全性,但在这种情况下它会让事情变得困难。
【解决方案3】:

如果您先放置所需的根域,然后放置 2 个子域,则 Microsoft 开发人员控制台提及的错误已解决。

添加 3 个整体: 1.域名.com 2. sub1.domain.com 3. sub2.domain.com

【讨论】:

    猜你喜欢
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多