0

问题:

MobileServiceClient.LoginAsync 永远不会退出登录对话框 - 即使在返回访问令牌之后也是如此。

环境:

  • 后端: Windows Azure 移动服务 .Net/C#
  • 前端: Windows 8.1 通用商店应用程序。.Net/C#

细节:

在我的应用程序中,以下代码无法从第二行显示的对话框返回:

var client = new MobileServiceClient("https://hana.azure-mobile.net", applicationKey);
var result = await client.LoginAsync("SmartThings");

推测:

我怀疑我的自定义 AuthenticationHandler 中用于处理挑战的代码主要是罪魁祸首。我重写 ApplyResponseChallengeAsync 的 AuthenticationProperties 中的 RedirectUri 始终为 null - 因此它将重定向 uri 设置为请求 uri。

代码如下所示:

        var redirectUri = Request.FromPath(Options.CallbackPath);
        var properties = challenge.Properties;

        if (String.IsNullOrEmpty(properties.RedirectUri))
        {
            properties.RedirectUri = Request.Uri.AbsoluteUri;
        }

        // OAuth2 10.12 CSRF
        GenerateCorrelationId(properties);

        var requestUrl = FormAuthorizeRequest(properties, redirectUri);
        Response.Redirect(requestUrl);

尝试解决

  1. 使用 WebAuthenticationBroker 而不是 MobileServiceClient 并明确提供回调 uri。
  2. 删除重新分配以重定向 uri。
  3. 切换重定向和请求 uri。
  4. 把盐撒在我肩上。
  5. 使用服务上的测试前端来导航和测试登录。
  6. 使用 HttpClient 并使用以下参数键显式构造请求:“redirect_uri”、“redirect_url”、“redirectUrl”、“redirectUri”。
  7. 给山羊流血
  8. 将 AuthenticationOptions 的 CallbackPath 值更改为“/signin-SmartThings”。
  9. 等待诸神黄昏

额外细节

我必须创建一个自定义 LoginProvider 和 OWIN 中间件来将我的自定义 AuthenticationHandler 注册到 owin 管道中。这似乎已正确设置,但我的 AuthenticationHandler 的实现可能是错误的。如果这有助于加快解决此问题,我很乐意应要求提供更多详细信息。

更新:

当尝试使用提供的回调 uri 从 WebAuthenticationBroker 登录时,SmartThings 的响应在正文中给出了“redirect_mismatch”错误。

但是,在浏览器中导航时,重定向 uri 被处理为“ https://hana.azure-mobile.net/signin-SmartThings?code=somemassivecode

这让我有点困惑,因为我希望看到一个访问令牌,而不是身份验证令牌,作为重定向 uri。

4

0 回答 0