diff --git a/src/Microsoft.AspNet.Authentication.OAuth/OAuthHandler.cs b/src/Microsoft.AspNet.Authentication.OAuth/OAuthHandler.cs index c0f05aa0dc..1d9c95d3cd 100644 --- a/src/Microsoft.AspNet.Authentication.OAuth/OAuthHandler.cs +++ b/src/Microsoft.AspNet.Authentication.OAuth/OAuthHandler.cs @@ -38,7 +38,20 @@ namespace Microsoft.AspNet.Authentication.OAuth var error = query["error"]; if (!StringValues.IsNullOrEmpty(error)) { - return AuthenticateResult.Failed(error); + var errorMessage = new StringBuilder(); + errorMessage.Append(error); + var errorDescription = query["error_description"]; + if (!StringValues.IsNullOrEmpty(errorDescription)) + { + errorMessage.Append(";Description=").Append(errorDescription); + } + var errorUri = query["error_uri"]; + if (!StringValues.IsNullOrEmpty(errorUri)) + { + errorMessage.Append(";Uri=").Append(errorUri); + } + + return AuthenticateResult.Failed(errorMessage.ToString()); } var code = query["code"]; diff --git a/test/Microsoft.AspNet.Authentication.Test/Google/GoogleMiddlewareTests.cs b/test/Microsoft.AspNet.Authentication.Test/Google/GoogleMiddlewareTests.cs index 514ce126f3..5914722c5d 100644 --- a/test/Microsoft.AspNet.Authentication.Test/Google/GoogleMiddlewareTests.cs +++ b/test/Microsoft.AspNet.Authentication.Test/Google/GoogleMiddlewareTests.cs @@ -270,16 +270,17 @@ namespace Microsoft.AspNet.Authentication.Google }; } }); + var sendTask = server.SendAsync("https://example.com/signin-google?error=OMG&error_description=SoBad&error_uri=foobar"); if (redirect) { - var transaction = await server.SendAsync("https://example.com/signin-google?error=OMG"); + var transaction = await sendTask; Assert.Equal(HttpStatusCode.Redirect, transaction.Response.StatusCode); - Assert.Equal("/error?ErrorMessage=OMG", transaction.Response.Headers.GetValues("Location").First()); + Assert.Equal("/error?ErrorMessage=OMG"+UrlEncoder.Default.Encode(";Description=SoBad;Uri=foobar"), transaction.Response.Headers.GetValues("Location").First()); } else { - var error = await Assert.ThrowsAnyAsync(() => server.SendAsync("https://example.com/signin-google?error=OMG")); - Assert.Equal("OMG", error.GetBaseException().Message); + var error = await Assert.ThrowsAnyAsync(() => sendTask); + Assert.Equal("OMG;Description=SoBad;Uri=foobar", error.GetBaseException().Message); } }