Skip to content

Commit 33229db

Browse files
committed
Adding support for PKCE
1 parent a14c3e6 commit 33229db

File tree

2 files changed

+633
-6
lines changed

2 files changed

+633
-6
lines changed

launcher-csharp/Startup.cs

+28-5
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ namespace DocuSign.CodeExamples
1111
using System.Net.Http;
1212
using System.Net.Http.Headers;
1313
using System.Security.Claims;
14+
using System.Security.Cryptography;
15+
using System.Text;
1416
using System.Text.Json;
1517
using System.Text.RegularExpressions;
1618
using System.Threading.Tasks;
1719
using System.Web;
20+
using Azure.Core;
1821
using DocuSign.CodeExamples.Common;
1922
using DocuSign.CodeExamples.Models;
2023
using DocuSign.Rooms.Api;
@@ -179,14 +182,17 @@ public void ConfigureServices(IServiceCollection services)
179182
options.ClaimActions.MapJsonKey("access_token", "access_token");
180183
options.ClaimActions.MapJsonKey("refresh_token", "refresh_token");
181184
options.ClaimActions.MapJsonKey("expires_in", "expires_in");
185+
182186
options.Events = new OAuthEvents
183187
{
184188
OnRedirectToAuthorizationEndpoint = redirectContext =>
185189
{
186190
List<string> scopesForCurrentApi = this.apiTypes.GetValueOrDefault(Enum.Parse<ExamplesApiType>(this.Configuration["API"]));
187-
188191
redirectContext.RedirectUri = this.UpdateRedirectUriScopes(redirectContext.RedirectUri, scopesForCurrentApi);
189192

193+
redirectContext.Options.UsePkce = this.Configuration["PkceFailed"] == null;
194+
195+
this.Configuration["RedirectUrl"] = redirectContext.RedirectUri;
190196
redirectContext.HttpContext.Response.Redirect(redirectContext.RedirectUri);
191197
return Task.FromResult(0);
192198
},
@@ -206,11 +212,28 @@ public void ConfigureServices(IServiceCollection services)
206212
context.RunClaimActions(payload.RootElement);
207213
}
208214
},
209-
OnRemoteFailure = context =>
215+
OnRemoteFailure = async context =>
210216
{
211-
context.HandleResponse();
212-
context.Response.Redirect("/Home/Error?message=" + context.Failure?.Message);
213-
return Task.FromResult(0);
217+
if (this.Configuration["PkceFailed"] != null)
218+
{
219+
context.HandleResponse();
220+
context.Response.Redirect("/Home/Error?message=" + context.Failure?.Message);
221+
}
222+
else
223+
{
224+
var redirectContext = new RedirectContext<OAuthOptions>(
225+
context.HttpContext,
226+
context.Scheme,
227+
options,
228+
context.Properties,
229+
this.Configuration["RedirectUrl"]);
230+
231+
this.Configuration["PkceFailed"] = "true";
232+
233+
await options.Events.OnRedirectToAuthorizationEndpoint(redirectContext);
234+
235+
context.HandleResponse();
236+
}
214237
},
215238
};
216239
});

launcher-csharp/web-form-config.json

+605-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)