diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2012-11-11 21:04:50 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2012-11-11 21:05:22 -0800 |
commit | 0b5012fe114c118e36dac4a1cb79e149236bf089 (patch) | |
tree | 9d7e060ec64036a3ec8c7f2d83b4955902cd1d0d /src | |
parent | be86c92c08a5178fca2253cdccf202b995cd1615 (diff) | |
download | DotNetOpenAuth-0b5012fe114c118e36dac4a1cb79e149236bf089.zip DotNetOpenAuth-0b5012fe114c118e36dac4a1cb79e149236bf089.tar.gz DotNetOpenAuth-0b5012fe114c118e36dac4a1cb79e149236bf089.tar.bz2 |
Adds ClientBase.AuthorizeRequest overloads that accept WebHeaderCollection.
Fixes #119
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs | 30 | ||||
-rw-r--r-- | src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs | 15 |
2 files changed, 42 insertions, 3 deletions
diff --git a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs index 869afe8..822ce6d 100644 --- a/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs +++ b/src/DotNetOpenAuth.OAuth2.Client/OAuth2/ClientBase.cs @@ -87,7 +87,20 @@ namespace DotNetOpenAuth.OAuth2 { Requires.NotNull(request, "request"); Requires.NotNullOrEmpty(accessToken, "accessToken"); - OAuthUtilities.AuthorizeWithBearerToken(request, accessToken); + AuthorizeRequest(request.Headers, accessToken); + } + + /// <summary> + /// Adds the necessary HTTP Authorization header to an HTTP request for protected resources + /// so that the Service Provider will allow the request through. + /// </summary> + /// <param name="requestHeaders">The headers on the request for protected resources from the service provider.</param> + /// <param name="accessToken">The access token previously obtained from the Authorization Server.</param> + public static void AuthorizeRequest(WebHeaderCollection requestHeaders, string accessToken) { + Requires.NotNull(requestHeaders, "requestHeaders"); + Requires.NotNullOrEmpty(accessToken, "accessToken"); + + OAuthUtilities.AuthorizeWithBearerToken(requestHeaders, accessToken); } /// <summary> @@ -99,6 +112,19 @@ namespace DotNetOpenAuth.OAuth2 { public void AuthorizeRequest(HttpWebRequest request, IAuthorizationState authorization) { Requires.NotNull(request, "request"); Requires.NotNull(authorization, "authorization"); + + this.AuthorizeRequest(request.Headers, authorization); + } + + /// <summary> + /// Adds the OAuth authorization token to an outgoing HTTP request, renewing a + /// (nearly) expired access token if necessary. + /// </summary> + /// <param name="requestHeaders">The headers on the request for protected resources from the service provider.</param> + /// <param name="authorization">The authorization for this request previously obtained via OAuth.</param> + public void AuthorizeRequest(WebHeaderCollection requestHeaders, IAuthorizationState authorization) { + Requires.NotNull(requestHeaders, "requestHeaders"); + Requires.NotNull(authorization, "authorization"); Requires.True(!string.IsNullOrEmpty(authorization.AccessToken), "authorization"); ErrorUtilities.VerifyProtocol(!authorization.AccessTokenExpirationUtc.HasValue || authorization.AccessTokenExpirationUtc < DateTime.UtcNow || authorization.RefreshToken != null, ClientStrings.AuthorizationExpired); @@ -107,7 +133,7 @@ namespace DotNetOpenAuth.OAuth2 { this.RefreshAuthorization(authorization); } - AuthorizeRequest(request, authorization.AccessToken); + AuthorizeRequest(requestHeaders, authorization.AccessToken); } #if CLR4 diff --git a/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs b/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs index 5a4a0d3..f28518f 100644 --- a/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs +++ b/src/DotNetOpenAuth.OAuth2/OAuth2/OAuthUtilities.cs @@ -136,7 +136,20 @@ namespace DotNetOpenAuth.OAuth2 { Requires.NotNullOrEmpty(accessToken, "accessToken"); ErrorUtilities.VerifyProtocol(accessToken.All(ch => accessTokenAuthorizationHeaderAllowedCharacters.IndexOf(ch) >= 0), OAuthStrings.AccessTokenInvalidForHttpAuthorizationHeader); - request.Headers[HttpRequestHeader.Authorization] = string.Format( + AuthorizeWithBearerToken(request.Headers, accessToken); + } + + /// <summary> + /// Authorizes an HTTP request using an OAuth 2.0 access token in an HTTP Authorization header. + /// </summary> + /// <param name="requestHeaders">The headers on the request for protected resources from the service provider.</param> + /// <param name="accessToken">The access token previously obtained from the Authorization Server.</param> + internal static void AuthorizeWithBearerToken(WebHeaderCollection requestHeaders, string accessToken) { + Requires.NotNull(requestHeaders, "requestHeaders"); + Requires.NotNullOrEmpty(accessToken, "accessToken"); + ErrorUtilities.VerifyProtocol(accessToken.All(ch => accessTokenAuthorizationHeaderAllowedCharacters.IndexOf(ch) >= 0), OAuthStrings.AccessTokenInvalidForHttpAuthorizationHeader); + + requestHeaders[HttpRequestHeader.Authorization] = string.Format( CultureInfo.InvariantCulture, Protocol.BearerHttpAuthorizationHeaderFormat, accessToken); |