任何人都可以帮助阐明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哈希值,但如果我尝试哈希值,它们仍然不匹配。
有什么想法吗?
答案 0 :(得分:1)
我终于解决了这里发生的事情,似乎LiveAuthClient返回的ID在某种程度上特定于Live SDK,没有任何按摩方式可以让我得到我需要的东西。
相反,WP8.1中的WebAuthenticationBroker Silverlight应用程序指向https://login.live.com/oauth20_authorize.srf?client_id=the_clientid&scope=wl.signin&response_type=token&display=touch
(其中'the_clientid'是实际的ClientID)我能够检索一个access_token然后可以用来访问原始用户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片段时,非常有用的两个链接:
http://msicc.net/?p=4054(Windows运行时应用)
http://msicc.net/?p=4074(Silverlight 8.1应用)