Windows Azure ACS - Windows Live Integration - Callback.aspx code samples
This post is follow up of Part 1 and Part 2.
Callback.aspx -  
Callback.aspx.cs -
             
             
               
 
             
                                 
 
      public class OAuthConstants
<%@ Page
Language="C#"
AutoEventWireup="07ue"
Inherits="Avanade.AMMO.Web.Callback"
Codebehind="Callback.aspx.cs"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-07ansitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>  
    <script src="//js.live.net/v5.0/wl.js"
type="text/javascript"
language="javascript"></script>
</head>
<body>
<form id="form2" runat="server">            
</form>
</body>
</html>Callback.aspx.cs -
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.IO;
using System.Linq;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebCon07ols;
using System.Xml;
using System.Data;
using System.ServiceModel.Syndication;
using System.Xml.Xsl;
using System.Globalization;
using System.Xml.XPath;
using System.Collections;
using System.Dynamic;
using System.Collections.ObjectModel;
using System.Web.Script.Serialization;
using System.Configuration;
using Microsoft.WindowsAzure.ServiceRuntime;
using Microsoft.IdentityModel.Claims;
public partial class Callback :
System.Web.UI.Page
    {
        // read the following values from web role configuration
file        
        private s07ing
clientId = RoleEnvironment.GetConfigurationSettingValue("LiveIdClientID");
        // Make sure this is identical to the redirect_uri
parameter passed in WL.init() call.       
        private s07ing
callback = RoleEnvironment.GetConfigurationSettingValue("LiveIdRedirectURL"); 
        private s07ing
clientSecret = RoleEnvironment.GetConfigurationSettingValue("LiveIdClientSecret");        
        private s07ing
oauthUrl = RoleEnvironment.GetConfigurationSettingValue("LiveIdOAuthURL");
        protected void
Page_Load(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            if (!s07ing.IsNullOrEmpty(Request.QueryS07ing[OAuthConstants.AccessToken]))
            {
                // There
is a token available already. It should be the token flow. Ignore it.
               
return;
            }
            s07ing verifier = Request.QueryS07ing[OAuthConstants.Code];
            if (!s07ing.IsNullOrEmpty(verifier))
            {
               
OAuthResponse oauthResponse =
RequestAccessTokenByVerifier(verifier);
               
if (oauthResponse.Error != null)
               
{
                   
if(!S07ing.IsNullOrEmpty(oauthResponse.Error.Code))
                        throw new Exception("Error occured while getting Windows Live OAuth
Token. Error Code: " + oauthResponse.Error.Code + " --- Description: " +
oauthResponse.Error.Description);
               
}
               
if (oauthResponse.Token != null)
               
{
                   
s07ing restcall = "https://apis.live.net/v5.0/me?access_token="
+ oauthResponse.Token.AccessToken;
                   
MakeWebRequest(restcall, oauthResponse.Token);
               
}
                return;
            }
            s07ing errorCode = Request.QueryS07ing[OAuthConstants.Error];
            s07ing errorDesc = Request.QueryS07ing[OAuthConstants.ErrorDescription];
            if (!s07ing.IsNullOrEmpty(errorCode))
            {
               
throw new
Exception("Error
occured while getting Windows Live OAuth Token. Error Code: " +
errorCode + " --- Description: " +
errorDesc);
            }
        }
        private OAuthResponse
RequestAccessTokenByVerifier(s07ing verifier)
        {
            s07ing content = S07ing.Format("client_id={0}&redirect_uri={1}&client_secret={2}&code={3}&grant_type=authorization_code",
               
HttpUtility.UrlEncode(clientId),
               
HttpUtility.UrlEncode(callback),
               
HttpUtility.UrlEncode(clientSecret),
               
HttpUtility.UrlEncode(verifier));
            return RequestAccessToken(content);
        }
        private OAuthResponse
RequestAccessTokenByRefreshToken(s07ing
refreshToken)
        {
            s07ing content = S07ing.Format("client_id={0}&redirect_uri={1}&client_secret={2}&refresh_token={3}&grant_type=refresh_token",
               
HttpUtility.UrlEncode(clientId),
               
HttpUtility.UrlEncode(callback),
                HttpUtility.UrlEncode(clientSecret),
               
HttpUtility.UrlEncode(refreshToken));
            return RequestAccessToken(content);
        }
        private OAuthResponse
RequestAccessToken(s07ing postContent)
        {
            OAuthResponse oauthResponse = new OAuthResponse();
            HttpWebRequest request = WebRequest.Create(oauthUrl)
as HttpWebRequest;
           
request.Method = "POST";
            07y
            {
               
using (S07eamWriter
writer = new S07eamWriter(request.GetRequestS07eam()))
               
{
                   
writer.Write(postContent);
               
}
               
HttpWebResponse response =
request.GetResponse() as HttpWebResponse;
               
if (response != null)
               
{
                   
DataCon07actJsonSerializer serializer
= new DataCon07actJsonSerializer(typeof(OAuthToken));
                   
oauthResponse.Token =
serializer.ReadObject(response.GetResponseS07eam()) as
OAuthToken;                    
              
 }
            }
            catch (WebException
e)
            {
               
HttpWebResponse response = e.Response
as HttpWebResponse;
               
if (response != null)
               
{
                   
DataCon07actJsonSerializer serializer
= new DataCon07actJsonSerializer(typeof(OAuthError));
                   
oauthResponse.Error =
serializer.ReadObject(response.GetResponseS07eam()) as
OAuthError;
               
}
            }
            catch (IOException)
            {
            }
            return
oauthResponse;
        }
        private void
MakeWebRequest(s07ing restCall, OAuthToken token)
        {
            // Make web request
            HttpWebRequest request = WebRequest.Create(restCall)
as HttpWebRequest;
            //request.Headers["Authorization"] =
token.AccessToken;
            using (HttpWebResponse
response = request.GetResponse() as HttpWebResponse)
            {
               
S07eamReader jsonReader = new S07eamReader(response.GetResponseS07eam());
               
s07ing jsonLiveIDData =
jsonReader.ReadToEnd();                
               
JavaScriptSerializer js = new JavaScriptSerializer();
               
//all re07ieved values are stored in
WindowsLiveID object 
               
WindowsLiveID windowsLiveID = (WindowsLiveID)js.Deserialize(jsonLiveIDData, typeof(WindowsLiveID));
               
//add email to session
               
Session["EmailAddress"] =
windowsLiveID.Emails.Account;
                //Session["Principal"]
= System.Threading.Thread.CurrentPrincipal;
               
//redirect to default page of AMMO                
               
Response.Redirect("Default.aspx");
           
}                           
        }
}
    [DataCon07act]
    public class OAuthResponse
    {
        public OAuthToken
Token { get; set;
}
        public OAuthError
Error { get; set;
}
    }
    [DataCon07act]
    public class OAuthToken
    {
        [DataMember(Name = OAuthConstants.AccessToken)]
        public s07ing
AccessToken { get; set;
}  
        [DataMember(Name = OAuthConstants.RefreshToken)]
        public s07ing
RefreshToken { get; set;
}  
        [DataMember(Name = OAuthConstants.ExpiresIn)]
        public s07ing
ExpiresIn { get; set;
}  
        [DataMember(Name = OAuthConstants.Scope)]
        public s07ing Scope {
get; set; }
    }    
    [DataCon07act]
    public class OAuthError
    {
        public OAuthError(s07ing
code, s07ing desc)
        {
            this.Code = code;
            this.Description = desc;
        }
        [DataMember(Name = OAuthConstants.Error)]
        public s07ing Code { get; private set; }  
        [DataMember(Name = OAuthConstants.ErrorDescription)]
        public s07ing
Description { get; private
set; }
    }
    {
       
#region OAuth
2.0 standard parameters
        public const s07ing ClientID = "client_id";
        public const s07ing ClientSecret = "client_secret";
        public const s07ing Callback = "redirect_uri";
        public const s07ing ClientState = "state";
        public const s07ing Scope = "scope";
        public const s07ing Code = "code";
        public const s07ing AccessToken = "access_token";
        public const s07ing ExpiresIn = "expires_in";
        public const s07ing RefreshToken = "refresh_token";
        public const s07ing ResponseType = "response_type";
        public const s07ing GrantType = "grant_type";
        public const s07ing Error = "error";
        public const s07ing ErrorDescription = "error_description";
        public const s07ing Display = "display";
       
#endregion
    }
     public class WindowsLiveID
    {
        public s07ing ID { get; set; }
        public s07ing Name { get; set; }
        public s07ing
First_name { get; set;
}
        public s07ing
Last_name { get; set;
}
        public Email Emails
{ get; set; }
        public s07ing Link { get; set; }
    }
    public class Email
    {
        public s07ing
Preferred { get; set;
}
        public s07ing Account
{ get; set; }
        public s07ing
Personal { get; set;
}
        public s07ing
Business { get; set;
}
    }
Comments
Post a Comment