私はパーティーに少し遅れましたが、同じ問題 (Live でユーザーを認証する) を解決しようとしてこれに出くわしたので、どうやってそれを機能させたかを説明します。
まず、ASP.NET プロジェクトの正しい NuGet パッケージはLiveSDKServerです。
次に、ユーザー情報の取得は複数ステップのプロセスです。
- ユーザーを Live に送信して、アプリが自分のデータにアクセスすることを承認できるようにします (その範囲は、指定した「スコープ」によって決まります)。
- アクセス コードを使用してライブ リダイレクトが返されます
- 次に、アクセス コードを使用してユーザー情報を要求します。
これはLive SDK ドキュメントでかなり詳しく説明されていますが、すべてをまとめるために、以下に非常に単純な作業例を含めます。トークン、ユーザー データ、例外の管理はユーザー次第です。
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");
}
}