gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:45:25 25 4
gpt4 key购买 nike

任何人都可以帮助阐明 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 个字符,而从身份验证 token 中提取的 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(其中 ' 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 网络应用返回的 ProviderKey 完全匹配!

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

http://msicc.net/?p=4054 (Windows 运行时应用程序)

http://msicc.net/?p=4074 (Silverlight 8.1 应用程序)

关于c# - GetExternalLoginInfoAsync 的实现不同于 LiveAuthClient.GetUserId(authToken)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24745975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com