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,