问题:
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);
尝试解决
- 使用 WebAuthenticationBroker 而不是 MobileServiceClient 并明确提供回调 uri。
- 删除重新分配以重定向 uri。
- 切换重定向和请求 uri。
- 把盐撒在我肩上。
- 使用服务上的测试前端来导航和测试登录。
- 使用 HttpClient 并使用以下参数键显式构造请求:“redirect_uri”、“redirect_url”、“redirectUrl”、“redirectUri”。
- 给山羊流血
- 将 AuthenticationOptions 的 CallbackPath 值更改为“/signin-SmartThings”。
- 等待诸神黄昏
额外细节
我必须创建一个自定义 LoginProvider 和 OWIN 中间件来将我的自定义 AuthenticationHandler 注册到 owin 管道中。这似乎已正确设置,但我的 AuthenticationHandler 的实现可能是错误的。如果这有助于加快解决此问题,我很乐意应要求提供更多详细信息。
更新:
当尝试使用提供的回调 uri 从 WebAuthenticationBroker 登录时,SmartThings 的响应在正文中给出了“redirect_mismatch”错误。
但是,在浏览器中导航时,重定向 uri 被处理为“ https://hana.azure-mobile.net/signin-SmartThings?code=somemassivecode ”
这让我有点困惑,因为我希望看到一个访问令牌,而不是身份验证令牌,作为重定向 uri。