C# GetExternalLoginInfoAsync的实现不同于LiveAuthClient.GetUserId(authToken)?

C# GetExternalLoginInfoAsync的实现不同于LiveAuthClient.GetUserId(authToken)?,c#,asp.net-mvc,asp.net-mvc-5,owin,live-sdk,C#,Asp.net Mvc,Asp.net Mvc 5,Owin,Live Sdk,有人能帮助我们了解一下Live SDK(v5.6)的实现与Microsoft.AspNet.Identity.Owin.dll中发生的事情吗 成功通过以下验证后返回的用户id: //MVC5 UserController for SSO with Microsoft Account var result = await AuthenticationManager.GetExternalLoginInfoAsync(); var userId = result.Login.ProviderKey;

有人能帮助我们了解一下Live SDK(v5.6)的实现与Microsoft.AspNet.Identity.Owin.dll中发生的事情吗

成功通过以下验证后返回的用户id:

//MVC5 UserController for SSO with Microsoft Account
var result = await AuthenticationManager.GetExternalLoginInfoAsync();
var userId = result.Login.ProviderKey;
…不同于通过以下方式返回的标识:

//WebAPI 2 custom AuthFilter (performs HMAC, etc)
var liveAuthClient = new LiveAuthClient(clientKey, secretKey, redirectUrl);
var userId = liveAuthClient.GetUserId(authTokenFromHttpHeader);
在这两种情况下,Windows Phone 8客户端应用程序、MVC5 WebApp和WebAPI 2都使用相同的ClientId和ClientSecret

MVC5网站返回的id长度为16个字符,而从身份验证令牌提取的id长度为32个字符

我认为客户端应用程序的id可能是MD5散列,但是如果我尝试对其进行散列,它们仍然不匹配


有什么想法吗?

我终于弄清楚了这里发生了什么,似乎LiveAuthClient返回的ID在某种程度上是特定于Live SDK的,任何按摩方式都无法满足我的需要

相反,WP8.1 Silverlight应用程序中的WebAuthenticationBroker指向
https://login.live.com/oauth20_authorize.srf?client_id=the_clientid&scope=wl.signin&response_type=token&display=touch
(其中“客户ID”是实际的客户ID)我能够检索一个access_令牌,该令牌可用于访问原始用户ID,如下所示:

//get the UID
var accessToken = "the_token"; //replace with actual token
var meUri = new Uri(string.Format("https://apis.live.net/v5.0/me/?access_token={0}", accessToken));

var httpClient = new HttpClient();               
var response = await httpClient.GetAsync(meUri);
var responseString = await response.Content.ReadAsStringAsync();
var meObj = new { Id = ""};

meObj = JsonConvert.DeserializeAnonymousType(responseString, meObj);
当对
meObj.Id
进行MD5哈希运算时,它与MVC5 web应用程序返回的ProviderKey完全匹配

两个链接对理解如何实现WebAuthenticationBroker非常有帮助:

(Windows运行时应用程序)


(Silverlight 8.1应用程序)

这篇文章非常有用。我最后做了完全相同的事情。谢谢我很惊讶关于LiveSDK和LiveAuthClient.GetUserId方法的文章很少。文档中根本没有关于此方法的内容。。。我想它可能是一个成对的id或者什么的。