diff --git a/Owin.Security.Providers/VisualStudio/Provider/VisualStudioAuthenticatedContext.cs b/Owin.Security.Providers/VisualStudio/Provider/VisualStudioAuthenticatedContext.cs
index 54b6137..41ba043 100644
--- a/Owin.Security.Providers/VisualStudio/Provider/VisualStudioAuthenticatedContext.cs
+++ b/Owin.Security.Providers/VisualStudio/Provider/VisualStudioAuthenticatedContext.cs
@@ -19,11 +19,13 @@ namespace Owin.Security.Providers.VisualStudio {
/// The OWIN environment
/// The JSON-serialized user
/// Visual Studio Online Access token
- public VisualStudioAuthenticatedContext(IOwinContext context, JObject user, string accessToken)
+ public VisualStudioAuthenticatedContext(IOwinContext context, JObject user, string accessToken, int expiresIn, string refreshToken)
: base(context)
{
AccessToken = accessToken;
User = user;
+ RefreshToken = refreshToken;
+ ExpiresIn = TimeSpan.FromSeconds(expiresIn);
Id = TryGetValue(user, "id");
Name = TryGetValue(user, "displayName");
@@ -44,6 +46,16 @@ namespace Owin.Security.Providers.VisualStudio {
///
public string AccessToken { get; private set; }
+ ///
+ /// Gets the Google OAuth refresh token. This is only available when the RequestOfflineAccess property of is set to true
+ ///
+ public string RefreshToken { get; private set; }
+
+ ///
+ /// Gets the Google+ access token expiration time
+ ///
+ public TimeSpan? ExpiresIn { get; set; }
+
///
/// Get the user's id
///
diff --git a/Owin.Security.Providers/VisualStudio/VisualStudioAuthenticationHandler.cs b/Owin.Security.Providers/VisualStudio/VisualStudioAuthenticationHandler.cs
index 295ce38..94f44d3 100644
--- a/Owin.Security.Providers/VisualStudio/VisualStudioAuthenticationHandler.cs
+++ b/Owin.Security.Providers/VisualStudio/VisualStudioAuthenticationHandler.cs
@@ -73,6 +73,8 @@ namespace Owin.Security.Providers.VisualStudio {
// Deserializes the token response
dynamic response = JsonConvert.DeserializeObject(text);
string accessToken = (string)response.access_token;
+ string refreshToken = (string)response.refresh_token;
+ int expiresIn = (int)response.expires_in;
// Get the Visual Studio Online user
HttpRequestMessage userRequest = new HttpRequestMessage(HttpMethod.Get, Options.Endpoints.UserInfoEndpoint);
@@ -83,7 +85,7 @@ namespace Owin.Security.Providers.VisualStudio {
text = await userResponse.Content.ReadAsStringAsync();
JObject user = JObject.Parse(text);
- var context = new VisualStudioAuthenticatedContext(Context, user, accessToken);
+ var context = new VisualStudioAuthenticatedContext(Context, user, accessToken, expiresIn, refreshToken);
context.Identity = new ClaimsIdentity(
Options.AuthenticationType,
ClaimsIdentity.DefaultNameClaimType,