/// <summary> /// Reads current user session. /// </summary> public static LiveLoginResult GetUserLoginStatus(HttpContextBase webContext) { Debug.Assert(webContext != null); HttpCookie cookie = webContext.Request.Cookies[AuthCookie]; LiveConnectSession session = null; LiveConnectSessionStatus status = LiveConnectSessionStatus.Unknown; if (cookie != null && cookie.Values != null) { string accessToken = cookie[AuthConstants.AccessToken]; if (!string.IsNullOrEmpty(accessToken)) { session = new LiveConnectSession(); session.AccessToken = UrlDataDecode(accessToken); session.AuthenticationToken = UrlDataDecode(cookie[AuthConstants.AuthenticationToken]); session.RefreshToken = UrlDataDecode(cookie[AuthConstants.RefreshToken]); session.Scopes = LiveAuthUtility.ParseScopeString(UrlDataDecode(cookie[AuthConstants.Scope])); session.Expires = LiveAuthWebUtility.ParseExpiresValue(UrlDataDecode(cookie[AuthConstants.Expires])); status = session.IsValid ? LiveConnectSessionStatus.Connected : LiveConnectSessionStatus.Expired; } else { // If we previously recorded NotConnected, take that value. // Ignore other values that may be set by JS library. LiveConnectSessionStatus statusFromCookie; if (Enum.TryParse <LiveConnectSessionStatus>(cookie[AuthConstants.Status], true /*ignore case*/, out statusFromCookie)) { if (statusFromCookie == LiveConnectSessionStatus.NotConnected) { status = statusFromCookie; } } } } return(new LiveLoginResult(status, session)); }
/// <summary> /// Creates a LiveConnectSession object based on the parsed response. /// </summary> private static LiveConnectSession CreateSession(IDictionary <string, object> result) { var session = new LiveConnectSession(); Debug.Assert(result.ContainsKey(AuthConstants.AccessToken)); if (result.ContainsKey(AuthConstants.AccessToken)) { session.AccessToken = result[AuthConstants.AccessToken] as string; if (result.ContainsKey(AuthConstants.AuthenticationToken)) { session.AuthenticationToken = result[AuthConstants.AuthenticationToken] as string; } if (result.ContainsKey(AuthConstants.ExpiresIn)) { if (result[AuthConstants.ExpiresIn] is string) { session.Expires = CalculateExpiration(result[AuthConstants.ExpiresIn] as string); } else { session.Expires = DateTimeOffset.UtcNow.AddSeconds((int)result[AuthConstants.ExpiresIn]); } } if (result.ContainsKey(AuthConstants.Scope)) { session.Scopes = LiveAuthUtility.ParseScopeString(result[AuthConstants.Scope] as string); } if (result.ContainsKey(AuthConstants.RefreshToken)) { session.RefreshToken = result[AuthConstants.RefreshToken] as string; } } return(session); }
/// <summary> /// Check if current session has a token request. /// </summary> public static bool ReadRefreshTokenRequest( HttpContextBase webContext, out string clientId, out IEnumerable <string> scopes) { clientId = null; scopes = null; bool isTokenRequest = false; if (webContext != null) { NameValueCollection queryString = webContext.Request.QueryString; string requestToken = queryString[AuthConstants.ResponseType]; isTokenRequest = (requestToken == AuthConstants.Token); if (isTokenRequest) { clientId = queryString[AuthConstants.ClientId]; // If this is sent by the client library, the token response should honor the scope parameter. scopes = LiveAuthUtility.ParseScopeString(queryString[AuthConstants.Scope]); } } return(isTokenRequest); }