LiveAuthClient坏了吗?

时间:2013-09-06 06:39:02

标签: asp.net live-sdk

LiveAuthClient的当前版本似乎已损坏或我的设置/配置中的某些内容。我通过Package Manager Console获得了LiveSDK版本5.4.3499.620。

我正在开发一个ASP.NET应用程序,问题是LiveAuthClient类似乎没有必要的成员/事件进行身份验证,所以它基本上无法使用。

IntelliSense auto-complete

请注意,InitializeAsync也拼写错误。

怎么了?

更新:

我获得了另一个版本的LiveSDK,它适用于ASP.NET应用程序,但现在我每次尝试使用InitializeSessionAsync或ExchangeAuthCodeAsync时都会遇到异常“找不到ID为1的密钥”。

https://github.com/liveservices/LiveSDK-for-Windows/issues/3

我不认为这是解决问题的正确方法,但我目前没有其他选择。

1 个答案:

答案 0 :(得分:0)

我参加派对的时间有点晚了,但是因为我偶然发现了这个问题,试图解决我认为同样的问题(用Live验证用户身份),我将描述我是如何使用它的。

首先,ASP.NET项目的正确NuGet包是LiveSDKServer

接下来,获取用户信息是一个多步骤的过程:

  1. 将用户发送给Live,以便他们可以授权您的应用访问其数据(其范围由您指定的“范围”决定)
  2. 使用访问代码
  3. 直接重定向回给您
  4. 然后使用访问代码
  5. 请求用户信息

    Live SDK documentation中对此进行了相当详细的描述,但我将在下面加入一个非常简单的工作示例来将它们放在一起。管理令牌,用户数据和例外取决于您。

    public class HomeController : Controller
    {
        private const string ClientId = "your client id";
        private const string ClientSecret = "your client secret";
        private const string RedirectUrl = "http://yourdomain.com/home/livecallback";
    
        [HttpGet]
        public ActionResult Index()
        {
            // This is just a page with a link to home/signin
            return View();
        }
    
        [HttpGet]
        public RedirectResult SignIn()
        {
            // Send the user over to Live so they can authorize your application.
            // Specify whatever scopes you need.
            var authClient = new LiveAuthClient(ClientId, ClientSecret, RedirectUrl);
            var scopes = new [] { "wl.signin", "wl.basic" };
            var loginUrl = authClient.GetLoginUrl(scopes);
            return Redirect(loginUrl);
        }
    
        [HttpGet]
        public async Task<ActionResult> LiveCallback(string code)
        {
            // Get an access token using the authorization code
            var authClient = new LiveAuthClient(ClientId, ClientSecret, RedirectUrl);
            var exchangeResult = await authClient.ExchangeAuthCodeAsync(HttpContext);
            if (exchangeResult.Status == LiveConnectSessionStatus.Connected)
            {
                var connectClient = new LiveConnectClient(authClient.Session);
                var connectResult = await connectClient.GetAsync("me");
                if (connectResult != null)
                {
                    dynamic me = connectResult.Result;
                    ViewBag.Username = me.name; // <-- Access user info
                }
            }
    
            return View("Index");
        }
    }