【问题标题】:How to create a custom OAuth 2.0 redirect_uri for Google provider, for UWP app?如何为 Google 提供商、UWP 应用程序创建自定义 OAuth 2.0 redirect_uri?
【发布时间】:2019-11-04 09:34:26
【问题描述】:

我想在 Google 开发者控制台中为原生应用程序注册一个自定义 redirect_uri(如 pw.oauth2:/oauth2redirect)(这是 UWP 应用程序的推荐方法)。根据https://developers.google.com/identity/protocols/OAuth2InstalledApp#request-parameter-redirect_uri,必须有一个选择“自定义URI方案(Android,iOS,UWP)”的选项,但我只看到这些选项:

  • 网络应用程序
  • 安卓
  • iOS
  • 其他

选择其他不允许我指定redirect_uri。

我应该如何为 UWP 应用注册自定义 redirect_uri?

如果我没有注册 redirect_uri,我会在 OAuth 授权过程中收到 redirect_uri_mismatch 错误。

此 github 示例中的 ClientID https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp 有效。看起来这个 ClientID 是 required_uri 注册的。但是如何为我自己的 ClientID 实现相同的目标?

这个老问题讨论了类似的问题,但也从未得到答复: Google APIs for UWP not playing nice with custom redirect scheme

编辑: 澄清。我正在使用上面提到的 Google 示例 (https://github.com/googlesamples/oauth-apps-for-windows/tree/master/OAuthUniversalApp)。它适用于 Google 提供的硬编码 ClientID。我无法让它与我自己的 ClientID 一起使用,因为我看不到在他们的开发者控制台中注册我自己的 redirect_uri 的方法。

【问题讨论】:

    标签: uwp oauth-2.0 google-oauth


    【解决方案1】:

    知道了(经过反复试验)。在 Google Developer Console 中,您需要创建 iOS 应用。在应用程序属性中,您需要在 Bundle ID 参数中指定 URL 方案(取自 Visual Studio 中 UWP 应用程序项目的 Package Manifest/Declarations/Protocol/Name)。

    AppStore ID 和 Team ID 可以留空。

    Bundle ID 充当 URL 方案。就我而言,我指定了 pw.oauth2 值(它是 Google 示例中的值)。然后我保存更改,在 Google UWP 示例中设置 iOS 应用的 ClientID,发现现在一切正常。

    Google 控制台在 iOS 应用属性中提供 iOS URL 方案 参数(类似于 com.googleusercontent.apps.6284700xxxxx-6tp4d3xxxxx)。对于 UWP 应用,请忽略此值。只有 Bundle ID 很重要。

    【讨论】:

    • 在您执行以下步骤后,它可以工作,但是如何在谷歌驱动器上上传图像或文档?你有任何代码示例吗?在uwp。在我的示例代码中,我试图在 WebView 控件中打开 authorizationRequest。那么如何捕捉响应呢?
    • 获得 access_token 后,应该很容易使用它来处理文件或其他内容,并且应该是 Google 上的大量示例(它们不需要特定于 UWP)。我没有进行文件上传(我检索了用户个人资料),但应该没有太大不同。获取 access_token 是最棘手的部分(并且是特定于 UWP 的)。
    • 你试过在WebView控件中打开吗?因为我在登录谷歌驱动器并允许应用程序后没有得到响应(按照必要的步骤操作)但我没有得到响应:(
    • 每次在OnNavigatedTo 函数中我得到e.Parameter 的空字符串
    • 您是否注册了 uri 方案,当浏览器中打开的协议以该方案开头时,该方案使您的 UWP 应用程序打开?
    【解决方案2】:

    两个想法:

    您是否尝试在 UWP 中使用 WebAuthenticationBroker 来提示用户登录?在这种情况下,您无法在 UWP 中自定义您的 redirect_uri... 它必须从代表您的 WebAuthenticationBroker.GetCurrentApplicationCallbackUri() 获取 Package SID... 看起来像这样:ms-app://s-1-15-2-1374842229...

    确保您正确编码和解码您的 redirect_uri - 如果您做错了,它将不匹配。没有您的代码,很难说出您是如何做到这一点的。

    WebUtility.UrlEncode(redirectURI);

    【讨论】:

    • 我的问题中提到了代码 - github.com/googlesamples/oauth-apps-for-windows/tree/master/…(它甚至不是我的代码,它是 Google 的)。正如我所说,它适用于那里硬编码的原始 ClientID,但不适用于我自己的 ClientID。对于我自己的 ClientID,我无法在 Google Developer Console 中更改 redirect_uri。
    • 不,他们的代码不使用 WebAuthenticationBroker,也不使用 Google API 库。
    • @visc - 在我的示例代码中,我试图在 WebView 控件中打开 authorizationRequest。那么如何捕捉响应呢?你有代码示例吗?
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2021-09-14
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    相关资源
    最近更新 更多