summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2010-06-05 22:12:26 -0700
committerAndrew Arnott <andrewarnott@gmail.com>2010-06-05 22:12:26 -0700
commit54af44023fc542eed70c168adf281bd1bd94e8a2 (patch)
tree1e6737649cd0799c7aae4c213974cb4eb782475c /src
parent44b7be237574be25deb0815a423552d495a60efb (diff)
downloadDotNetOpenAuth-54af44023fc542eed70c168adf281bd1bd94e8a2.zip
DotNetOpenAuth-54af44023fc542eed70c168adf281bd1bd94e8a2.tar.gz
DotNetOpenAuth-54af44023fc542eed70c168adf281bd1bd94e8a2.tar.bz2
Updated the Device flow so the messages match the latest spec.
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth.Test/OAuthWrap/MessageFactoryTests.cs24
-rw-r--r--src/DotNetOpenAuth/DotNetOpenAuth.csproj6
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs2
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Assertion/AssertionRequest.cs1
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/ClientCredentials/ClientCredentialsRequest.cs1
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenFailedResponse.cs21
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenRequest.cs44
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenSuccessResponse.cs45
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppRequest.cs24
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppResponse.cs7
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/RefreshAccessTokenRequest.cs1
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormat.cs (renamed from src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormat.cs)0
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormatEncoder.cs (renamed from src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormatEncoder.cs)2
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/UsernameAndPassword/UserNamePasswordRequest.cs1
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/WebAppAccessTokenRequest.cs1
-rw-r--r--src/DotNetOpenAuth/OAuthWrap/Protocol.cs4
16 files changed, 75 insertions, 109 deletions
diff --git a/src/DotNetOpenAuth.Test/OAuthWrap/MessageFactoryTests.cs b/src/DotNetOpenAuth.Test/OAuthWrap/MessageFactoryTests.cs
index 9b937c1..a9a696b 100644
--- a/src/DotNetOpenAuth.Test/OAuthWrap/MessageFactoryTests.cs
+++ b/src/DotNetOpenAuth.Test/OAuthWrap/MessageFactoryTests.cs
@@ -221,30 +221,6 @@ namespace DotNetOpenAuth.Test.OAuthWrap {
Assert.IsInstanceOf(typeof(RichAppAccessTokenRequest), request);
}
- [TestCase]
- public void RichAppAccessTokenSuccessResponse() {
- var fields = new Dictionary<string, string> {
- { Protocol.refresh_token, "abc" },
- { Protocol.access_token, "abc" },
- };
- var request = new RichAppAccessTokenRequest(this.recipient.Location, Protocol.Default.Version);
- Assert.IsInstanceOf(
- typeof(RichAppAccessTokenSuccessResponse),
- this.messageFactory.GetNewResponseMessage(request, fields));
- }
-
- [TestCase]
- public void RichAppAccessTokenFailedResponse() {
- // HTTP 401 Unauthorized
- // WWW-Authenticate: WRAP
- var fields = new Dictionary<string, string> {
- };
- var request = new RichAppAccessTokenRequest(this.recipient.Location, Protocol.Default.Version);
- Assert.IsInstanceOf(
- typeof(RichAppAccessTokenFailedResponse),
- this.messageFactory.GetNewResponseMessage(request, fields));
- }
-
#endregion
#region Client Account and Password profile messages
diff --git a/src/DotNetOpenAuth/DotNetOpenAuth.csproj b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
index 52472ff..1ba2f20 100644
--- a/src/DotNetOpenAuth/DotNetOpenAuth.csproj
+++ b/src/DotNetOpenAuth/DotNetOpenAuth.csproj
@@ -339,8 +339,6 @@ http://opensource.org/licenses/ms-pl.html
<Compile Include="OAuthWrap\Messages\Device\RichAppAccessTokenRequest.cs" />
<Compile Include="OAuthWrap\Messages\Device\RichAppRequest.cs" />
<Compile Include="OAuthWrap\Messages\Device\RichAppResponse.cs" />
- <Compile Include="OAuthWrap\Messages\Device\RichAppAccessTokenSuccessResponse.cs" />
- <Compile Include="OAuthWrap\Messages\Device\RichAppAccessTokenFailedResponse.cs" />
<Compile Include="OAuthWrap\Messages\UnauthorizedResponse.cs" />
<Compile Include="OAuthWrap\Messages\AccessTokenFailedResponse.cs" />
<Compile Include="OAuthWrap\Messages\AccessTokenSuccessResponse.cs" />
@@ -349,8 +347,8 @@ http://opensource.org/licenses/ms-pl.html
<Compile Include="OAuthWrap\Messages\UserAgent\UserAgentSuccessResponse.cs" />
<Compile Include="OAuthWrap\Messages\UsernameAndPassword\UserNamePasswordCaptchaResponse.cs" />
<Compile Include="OAuthWrap\Messages\UsernameAndPassword\UserNamePasswordVerificationResponse.cs" />
- <Compile Include="OAuthWrap\Messages\WebServer\ResponseFormat.cs" />
- <Compile Include="OAuthWrap\Messages\WebServer\ResponseFormatEncoder.cs" />
+ <Compile Include="OAuthWrap\Messages\ResponseFormat.cs" />
+ <Compile Include="OAuthWrap\Messages\ResponseFormatEncoder.cs" />
<Compile Include="OAuthWrap\ResourceServer.cs" />
<Compile Include="OAuthWrap\StandardAccessTokenAnalyzer.cs" />
<Compile Include="OAuthWrap\UserAgentClient.cs" />
diff --git a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
index 3ba7bac..702c29a 100644
--- a/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/ChannelElements/OAuthWrapAuthorizationServerChannel.cs
@@ -35,8 +35,6 @@ namespace DotNetOpenAuth.OAuthWrap.ChannelElements {
typeof(Messages.RichAppRequest),
typeof(Messages.RichAppResponse),
typeof(Messages.RichAppAccessTokenRequest),
- typeof(Messages.RichAppAccessTokenSuccessResponse),
- typeof(Messages.RichAppAccessTokenFailedResponse),
typeof(Messages.UserNamePasswordRequest),
typeof(Messages.UserNamePasswordSuccessResponse),
typeof(Messages.UserNamePasswordVerificationResponse),
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Assertion/AssertionRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Assertion/AssertionRequest.cs
index 40d25bc..2917a69 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Assertion/AssertionRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/Assertion/AssertionRequest.cs
@@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
using System.Text;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuthWrap.ChannelElements;
- using DotNetOpenAuth.OAuthWrap.Messages.WebServer;
/// <summary>
/// A request from a Client to an Authorization Server with some assertion for an access token.
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/ClientCredentials/ClientCredentialsRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/ClientCredentials/ClientCredentialsRequest.cs
index 5de3498..506a0db 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/ClientCredentials/ClientCredentialsRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/ClientCredentials/ClientCredentialsRequest.cs
@@ -11,7 +11,6 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
using System.Text;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuthWrap.ChannelElements;
- using DotNetOpenAuth.OAuthWrap.Messages.WebServer;
/// <summary>
/// A request for an access token for a client application that has its
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenFailedResponse.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenFailedResponse.cs
deleted file mode 100644
index be4f001..0000000
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenFailedResponse.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-//-----------------------------------------------------------------------
-// <copyright file="RichAppAccessTokenFailedResponse.cs" company="Andrew Arnott">
-// Copyright (c) Andrew Arnott. All rights reserved.
-// </copyright>
-//-----------------------------------------------------------------------
-
-namespace DotNetOpenAuth.OAuthWrap.Messages {
- /// <summary>
- /// A response from the Authorization Server to the Client in the event
- /// that an access token could not be granted.
- /// </summary>
- internal class RichAppAccessTokenFailedResponse : UnauthorizedResponse {
- /// <summary>
- /// Initializes a new instance of the <see cref="RichAppAccessTokenFailedResponse"/> class.
- /// </summary>
- /// <param name="request">The request.</param>
- internal RichAppAccessTokenFailedResponse(RichAppAccessTokenRequest request)
- : base(request) {
- }
- }
-}
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenRequest.cs
index 015ef54..ee0deb7 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenRequest.cs
@@ -7,15 +7,20 @@
namespace DotNetOpenAuth.OAuthWrap.Messages {
using System;
using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
using System.Linq;
using System.Text;
using DotNetOpenAuth.Messaging;
+ using DotNetOpenAuth.OAuthWrap.ChannelElements;
/// <summary>
/// A message from the Client to the Authorization Server exchanging a
/// verification code for refresh and access tokens.
/// </summary>
- internal class RichAppAccessTokenRequest : MessageBase {
+ internal class RichAppAccessTokenRequest : MessageBase, IAccessTokenRequest, IOAuthDirectResponseFormat {
+ [MessagePart(Protocol.type, IsRequired = true)]
+ private const string MessageType = "device_token";
+
/// <summary>
/// Initializes a new instance of the <see cref="RichAppAccessTokenRequest"/> class.
/// </summary>
@@ -27,11 +32,29 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
}
/// <summary>
+ /// Initializes a new instance of the <see cref="RichAppAccessTokenRequest"/> class.
+ /// </summary>
+ /// <param name="authorizationServer">The authorization server.</param>
+ internal RichAppAccessTokenRequest(AuthorizationServerDescription authorizationServer)
+ : this(authorizationServer.TokenEndpoint, authorizationServer.Version) {
+ Contract.Requires<ArgumentNullException>(authorizationServer != null);
+ Contract.Requires<ArgumentException>(authorizationServer.Version != null);
+ Contract.Requires<ArgumentException>(authorizationServer.TokenEndpoint != null);
+
+ // We prefer URL encoding of the data.
+ this.Format = ResponseFormat.Form;
+ }
+
+ /// <summary>
/// Gets or sets the identifier by which this client is known to the Authorization Server.
/// </summary>
/// <value>The client identifier.</value>
[MessagePart(Protocol.client_id, IsRequired = true, AllowEmpty = false)]
- internal string ClientIdentifier { get; set; }
+ public string ClientIdentifier { get; internal set; }
+
+ string IAccessTokenRequest.ClientSecret {
+ get { return null; }
+ }
/// <summary>
/// Gets or sets the verification code previously communicated to the Client
@@ -42,6 +65,23 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
internal string VerificationCode { get; set; }
/// <summary>
+ /// Gets or sets the type of the secret.
+ /// </summary>
+ /// <value>The type of the secret.</value>
+ /// <remarks>
+ /// OPTIONAL. The access token secret type as described by Section 5.3 (Cryptographic Tokens Requests). If omitted, the authorization server will issue a bearer token (an access token without a matching secret) as described by Section 5.2 (Bearer Token Requests).
+ /// </remarks>
+ [MessagePart(Protocol.secret_type, IsRequired = false, AllowEmpty = false)]
+ public string SecretType { get; set; }
+
+ ResponseFormat IOAuthDirectResponseFormat.Format {
+ get { return this.Format.HasValue ? this.Format.Value : ResponseFormat.Json; }
+ }
+
+ [MessagePart(Protocol.format, Encoder = typeof(ResponseFormatEncoder))]
+ private ResponseFormat? Format { get; set; }
+
+ /// <summary>
/// Checks the message state for conformity to the protocol specification
/// and throws an exception if the message is invalid.
/// </summary>
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenSuccessResponse.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenSuccessResponse.cs
deleted file mode 100644
index 17979e4..0000000
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppAccessTokenSuccessResponse.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-//-----------------------------------------------------------------------
-// <copyright file="RichAppAccessTokenSuccessResponse.cs" company="Andrew Arnott">
-// Copyright (c) Andrew Arnott. All rights reserved.
-// </copyright>
-//-----------------------------------------------------------------------
-
-namespace DotNetOpenAuth.OAuthWrap.Messages {
- using System;
- using DotNetOpenAuth.Messaging;
-
- /// <summary>
- /// The direct response message that contains the access token from the Authorization Server
- /// to the Client.
- /// </summary>
- internal class RichAppAccessTokenSuccessResponse : MessageBase {
- /// <summary>
- /// Initializes a new instance of the <see cref="RichAppAccessTokenSuccessResponse"/> class.
- /// </summary>
- /// <param name="request">The request.</param>
- internal RichAppAccessTokenSuccessResponse(RichAppAccessTokenRequest request)
- : base(request) {
- }
-
- /// <summary>
- /// Gets or sets the refresh token.
- /// </summary>
- /// <value>The token.</value>
- [MessagePart(Protocol.refresh_token, IsRequired = true, AllowEmpty = false)]
- internal string RefreshToken { get; set; }
-
- /// <summary>
- /// Gets or sets the access token.
- /// </summary>
- /// <value>The token.</value>
- [MessagePart(Protocol.access_token, IsRequired = true, AllowEmpty = false)]
- internal string AccessToken { get; set; }
-
- /// <summary>
- /// Gets or sets the lifetime of the access token.
- /// </summary>
- /// <value>The lifetime.</value>
- [MessagePart(Protocol.expires_in, IsRequired = false, AllowEmpty = false, Encoder = typeof(TimespanSecondsEncoder))]
- internal TimeSpan? Lifetime { get; set; }
- }
-}
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppRequest.cs
index b392c52..d6ee485 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppRequest.cs
@@ -7,6 +7,7 @@
namespace DotNetOpenAuth.OAuthWrap.Messages {
using System;
using System.Collections.Generic;
+ using System.Diagnostics.Contracts;
using System.Linq;
using System.Text;
using DotNetOpenAuth.Messaging;
@@ -15,7 +16,7 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
/// A request from a rich app Client to an Authorization Server requested
/// authorization to access user Protected Data.
/// </summary>
- internal class RichAppRequest : MessageBase {
+ internal class RichAppRequest : MessageBase, IOAuthDirectResponseFormat {
[MessagePart(Protocol.type, IsRequired = true)]
private const string MessageType = "device_code";
@@ -30,6 +31,20 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
}
/// <summary>
+ /// Initializes a new instance of the <see cref="RichAppRequest"/> class.
+ /// </summary>
+ /// <param name="authorizationServer">The authorization server.</param>
+ internal RichAppRequest(AuthorizationServerDescription authorizationServer)
+ : this(authorizationServer.TokenEndpoint, authorizationServer.Version) {
+ Contract.Requires<ArgumentNullException>(authorizationServer != null);
+ Contract.Requires<ArgumentException>(authorizationServer.Version != null);
+ Contract.Requires<ArgumentException>(authorizationServer.TokenEndpoint != null);
+
+ // We prefer URL encoding of the data.
+ this.Format = ResponseFormat.Form;
+ }
+
+ /// <summary>
/// Gets or sets the client identifier previously obtained from the Authorization Server.
/// </summary>
/// <value>The client identifier.</value>
@@ -42,5 +57,12 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
/// <value>The Authorization Server MAY define authorization scope values for the Client to include.</value>
[MessagePart(Protocol.scope, IsRequired = false, AllowEmpty = true)]
internal string Scope { get; set; }
+
+ ResponseFormat IOAuthDirectResponseFormat.Format {
+ get { return this.Format.HasValue ? this.Format.Value : ResponseFormat.Json; }
+ }
+
+ [MessagePart(Protocol.format, Encoder = typeof(ResponseFormatEncoder))]
+ private ResponseFormat? Format { get; set; }
}
}
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppResponse.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppResponse.cs
index 4a93a45..98a7b6e 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppResponse.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/Device/RichAppResponse.cs
@@ -44,8 +44,11 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
/// <summary>
/// Gets or sets the user authorization URI on the authorization server.
/// </summary>
- [MessagePart(Protocol.user_uri, IsRequired = true)]
- internal Uri AuthorizationUri { get; set; }
+ /// <value>
+ /// REQUIRED. The end-user verification URI on the authorization server. The URI should be short and easy to remember as end-users will be asked to manually type it into their user-agent.
+ /// </value>
+ [MessagePart(Protocol.verification_uri, IsRequired = true)]
+ internal Uri VerificationUri { get; set; }
/// <summary>
/// Gets or sets the lifetime.
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/RefreshAccessTokenRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/RefreshAccessTokenRequest.cs
index ca8c6dc..ad4d45c 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/RefreshAccessTokenRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/RefreshAccessTokenRequest.cs
@@ -8,7 +8,6 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
using System;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuthWrap.ChannelElements;
- using DotNetOpenAuth.OAuthWrap.Messages.WebServer;
/// <summary>
/// A request from the client to the token endpoint for a new access token
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormat.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormat.cs
index 720c62b..720c62b 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormat.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormat.cs
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormatEncoder.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormatEncoder.cs
index f806b4e..6cf879c 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/ResponseFormatEncoder.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/ResponseFormatEncoder.cs
@@ -4,7 +4,7 @@
// </copyright>
//-----------------------------------------------------------------------
-namespace DotNetOpenAuth.OAuthWrap.Messages.WebServer {
+namespace DotNetOpenAuth.OAuthWrap.Messages {
using System;
using System.Collections.Generic;
using System.Linq;
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/UsernameAndPassword/UserNamePasswordRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/UsernameAndPassword/UserNamePasswordRequest.cs
index 297f480..dedcc3e 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/UsernameAndPassword/UserNamePasswordRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/UsernameAndPassword/UserNamePasswordRequest.cs
@@ -12,7 +12,6 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
using System.Text;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuthWrap.ChannelElements;
- using DotNetOpenAuth.OAuthWrap.Messages.WebServer;
/// <summary>
/// A request for a delegation code in exchange for a user's confidential
diff --git a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/WebAppAccessTokenRequest.cs b/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/WebAppAccessTokenRequest.cs
index 727b21f..ccfc8a3 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/WebAppAccessTokenRequest.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Messages/WebServer/WebAppAccessTokenRequest.cs
@@ -10,7 +10,6 @@ namespace DotNetOpenAuth.OAuthWrap.Messages {
using ChannelElements;
using Configuration;
using Messaging;
- using WebServer;
/// <summary>
/// A message sent by the Client directly to the Authorization Server to exchange
diff --git a/src/DotNetOpenAuth/OAuthWrap/Protocol.cs b/src/DotNetOpenAuth/OAuthWrap/Protocol.cs
index d42e4e2..074f794 100644
--- a/src/DotNetOpenAuth/OAuthWrap/Protocol.cs
+++ b/src/DotNetOpenAuth/OAuthWrap/Protocol.cs
@@ -99,9 +99,9 @@ namespace DotNetOpenAuth.OAuthWrap {
internal const string user_code = "user_code";
/// <summary>
- /// The "user_uri" string.
+ /// The "verification_uri" string.
/// </summary>
- internal const string user_uri = "user_uri";
+ internal const string verification_uri = "verification_uri";
/// <summary>
/// The "interval" string.