【问题标题】:OAuth2 WebAuthenticationBroker in Windows Phone does not callback to ContinuationManagerWindows Phone 中的 OAuth2 WebAuthenticationBroker 不会回调到 ContinuationManager
【发布时间】:2014-09-18 11:00:59
【问题描述】:

我正在我的 Windows Phone 8.1 应用程序中进行 OAuth2 身份验证,并且我正在使用 WebAuthenticationBroker 和 WP 的 AuthenticateAndContinue() 方法。
我正在向我发送两个参数的服务器进行身份验证,它返回我的访问令牌,中间没有任何其他步骤。鉴于这种情况,我没有 callbakUri,所以我使用 WebAuthenticationBroker.GetCurrentApplicationCallbackUri()

我的代码如下所示:

Uri endpointURL = new Uri(_requestUrl + "&client_id=" + clientId + "&client_secret=" + clientSecret);
Uri callbackUri = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();
WebAuthenticationBroker.AuthenticateAndContinue(endpointURL, callbackUri, null, WebAuthenticationOptions.None);

我的项目中有ContinuationManager.cs 类,以及App.xaml.cs 中所需的所有更改,如下所述:http://msdn.microsoft.com/en-us/library/dn631755.aspx

我的问题是,在我执行上面的代码之后,ContinuationManager 类中的Continue() 方法永远不会执行,所以我的应用程序在那里阻塞。

我在这里遗漏了什么吗?

【问题讨论】:

  • 我不知道您正在调用什么服务,但它可能需要其中一个参数中的回调 URI(以及客户端 ID 和客户端密码)。否则,它无法猜测身份验证后需要将用户重定向到哪里
  • 就是这样,事实并非如此。我可以改为通过 HTTP POST 发出请求,但使用新类会很好。
  • _requestUrl 的值是多少?
  • 请解释“使用新类会很好”。你有一把新螺丝刀,你想用它把钉子钉进墙上?如果您可以使用 POST 请求发出请求,那为什么不呢?看我的回答。

标签: c# oauth-2.0 windows-phone-8.1 continuations


【解决方案1】:

WebAuthenticationBroker.AuthenticateAndContinue 知道当用户被重定向到特定页面时身份验证已完成。

有两种处理方式:

    1234563 @ 方法(正如您在代码示例中所做的那样)
  1. 如果服务不接受回调参数,那么您需要以其他方式执行操作:首先检查服务重定向的 URI(通过手动调用一次),然后将此 URI 传递给 WebAuthenticationBroker.AuthenticateAndContinue 方法.例如,假设 OAuth 服务重定向到 http://www.stackoverflow.com,那么您需要调用:

    WebAuthenticationBroker.AuthenticateAndContinue(endpointURL, new Uri("http://www.stackoverflow.com"), null, WebAuthenticationOptions.None);
    

【讨论】:

    【解决方案2】:

    您似乎正在使用Client Credentials Grant。这是一个非交互式流程,您不需要 WebAuthenticationBroker 即可使用它。只需使用 HttpClient 获取令牌,如果您正在使用此流程

    话虽如此,这个流程可能不是您所需要的。首先,我假设您确实想要验证实际用户,也就是资源所有者。其次,您使用的流程要求您的手机应用程序中存在客户端密码。这是一个很大的禁忌!此流程适用于服务器端进程!

    我认为您需要查看Authorization Code Grant

    【讨论】:

    • 我确实在使用 Client Credentials Grant,现在 Http 方法似乎是正确的。然而,我认为关于这个主题的问答对于那些可能想要回拨到他们自己的服务的人来说是有效的和有帮助的。不过,我感谢您提供额外且有用的答案。
    • @ricochite 我仍然无法理解您为什么使用客户端凭据进行身份验证。如果您在手机应用程序中嵌入客户端 ID 和客户端密码,则基本上每个人都可以使用。您也可以不进行身份验证。你能解释一下吗?
    • 身份验证将在类库中完成,客户端数据将由主应用程序传递。它被要求像这样工作,我对此事没有意见。
    猜你喜欢
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-20
    相关资源
    最近更新 更多