Login to SkyDrive using Live SDK
Categories:
Seamless SkyDrive Login in Windows Store Apps with Live SDK
Learn how to integrate SkyDrive (now OneDrive) login into your Windows Store apps using the Microsoft Live SDK, enabling secure user authentication and access to cloud storage.
Integrating cloud storage services like SkyDrive (now OneDrive) into your Windows Store applications enhances user experience by allowing them to access their files directly from your app. The Microsoft Live SDK provides a straightforward way to authenticate users with their Microsoft accounts and gain access to their SkyDrive data. This article will guide you through the process of setting up your project, authenticating users, and handling the login flow within a C# Windows Store app.
Prerequisites and Project Setup
Before you can implement SkyDrive login, you need to ensure your development environment is correctly configured and your application is registered. This involves obtaining a Client ID for your application and installing the Live SDK. The Live SDK simplifies interaction with Microsoft services, including authentication and API calls to SkyDrive.
1. Register Your Application
Navigate to the Microsoft Application Registration Portal (apps.dev.microsoft.com) and register a new application. Make sure to note down your Client ID, as this will be crucial for authentication. Configure the platform for 'Windows Store' and provide a redirect URI if necessary, though for Live SDK in Windows Store apps, it's often handled internally.
2. Install Live SDK
In your Visual Studio project, right-click on 'References' and select 'Manage NuGet Packages...'. Search for 'Live SDK' and install the Microsoft.Live.SDK
package. This will add the necessary assemblies to your project.
3. Add Capabilities
Open your Package.appxmanifest
file. Under the 'Capabilities' tab, ensure that 'Internet (Client)' is checked. This allows your application to communicate with Microsoft's authentication servers.
Implementing the Login Flow
The core of the SkyDrive login process involves using the LiveAuthClient
class from the Live SDK. This class handles the authentication UI and token management. You'll typically initiate the login process from a button click or when your app requires access to SkyDrive.
sequenceDiagram participant App participant LiveSDK participant MicrosoftAuth participant SkyDriveAPI App->>LiveSDK: Request Login (scopes: wl.signin, wl.skydrive) LiveSDK->>MicrosoftAuth: Open Authentication UI MicrosoftAuth-->>App: User enters credentials MicrosoftAuth->>MicrosoftAuth: Authenticate User MicrosoftAuth-->>LiveSDK: Return Access Token & Refresh Token LiveSDK-->>App: LoginResult (session) App->>SkyDriveAPI: Make API Call (using session.AccessToken) SkyDriveAPI-->>App: Return Data
Sequence diagram of the Live SDK login and SkyDrive access flow.
using Microsoft.Live;
using System;
using Windows.UI.Popups;
public async void LoginToSkyDrive()
{
LiveAuthClient authClient = new LiveAuthClient("YOUR_CLIENT_ID");
try
{
// Request necessary scopes: wl.signin for basic login, wl.skydrive for SkyDrive access
LiveLoginResult result = await authClient.LoginAsync(new string[] { "wl.signin", "wl.skydrive" });
if (result.Status == LiveConnectSessionStatus.Connected)
{
// User is logged in and session is active
LiveConnectSession session = result.Session;
LiveConnectClient liveClient = new LiveConnectClient(session);
// Example: Get user's name
LiveOperationResult meResult = await liveClient.GetAsync("me");
dynamic meData = meResult.Result;
string userName = meData.name;
var messageDialog = new MessageDialog($"Welcome, {userName}! You are logged in to SkyDrive.");
await messageDialog.ShowAsync();
// Now you can use liveClient to interact with SkyDrive, e.g., upload/download files
// For example: LiveOperationResult folders = await liveClient.GetAsync("me/skydrive/files");
}
else
{
// User cancelled or login failed
var messageDialog = new MessageDialog("SkyDrive login cancelled or failed.");
await messageDialog.ShowAsync();
}
}
catch (LiveAuthException ex)
{
// Handle authentication errors
var messageDialog = new MessageDialog($"Authentication error: {ex.Message}");
await messageDialog.ShowAsync();
}
catch (LiveConnectException ex)
{
// Handle Live Connect API errors
var messageDialog = new MessageDialog($"Live Connect API error: {ex.Message}");
await messageDialog.ShowAsync();
}
}
C# code for initiating SkyDrive login and handling the result.
"YOUR_CLIENT_ID"
with the actual Client ID you obtained from the Microsoft Application Registration Portal. Also, ensure you request the appropriate scopes (e.g., wl.skydrive_update
for write access) based on your application's needs.Handling Session Management and Logout
Once a user is logged in, their session information (access token, refresh token) is managed by the Live SDK. You can check the current login status and log users out when necessary. The SDK handles token refreshing automatically, but it's good practice to understand how to manage sessions.
using Microsoft.Live;
using Windows.UI.Popups;
// To check current login status
public async void CheckLoginStatus()
{
LiveAuthClient authClient = new LiveAuthClient("YOUR_CLIENT_ID");
LiveLoginResult result = await authClient.InitializeAsync();
if (result.Status == LiveConnectSessionStatus.Connected)
{
// User is already logged in
LiveConnectClient liveClient = new LiveConnectClient(result.Session);
LiveOperationResult meResult = await liveClient.GetAsync("me");
dynamic meData = meResult.Result;
string userName = meData.name;
var messageDialog = new MessageDialog($"Currently logged in as: {userName}");
await messageDialog.ShowAsync();
}
else
{
var messageDialog = new MessageDialog("Not currently logged in to SkyDrive.");
await messageDialog.ShowAsync();
}
}
// To log out a user
public async void LogoutFromSkyDrive()
{
LiveAuthClient authClient = new LiveAuthClient("YOUR_CLIENT_ID");
try
{
await authClient.LogoutAsync();
var messageDialog = new MessageDialog("Successfully logged out from SkyDrive.");
await messageDialog.ShowAsync();
}
catch (LiveAuthException ex)
{
var messageDialog = new MessageDialog($"Logout error: {ex.Message}");
await messageDialog.ShowAsync();
}
}
C# code for checking login status and logging out from SkyDrive.
InitializeAsync()
method is useful for checking if a user has previously logged in and has an active session without prompting them again. This is ideal for app startup or when resuming from suspension.By following these steps, you can successfully integrate SkyDrive login into your Windows Store applications, providing users with seamless access to their cloud files and enhancing the functionality of your app. Remember to handle potential errors gracefully and provide clear feedback to the user throughout the authentication process.