/// <summary> /// Sends a token request using the authorization_code grant type. /// </summary> /// <param name="client">The client.</param> /// <param name="request">The request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public static async Task <TokenResponse> RequestAuthorizationCodeTokenAsync(this HttpMessageInvoker client, AuthorizationCodeTokenRequest request, CancellationToken cancellationToken = default) { var clone = request.Clone(); clone.Parameters.AddRequired(OidcConstants.TokenRequest.GrantType, OidcConstants.GrantTypes.AuthorizationCode); clone.Parameters.AddRequired(OidcConstants.TokenRequest.Code, request.Code); clone.Parameters.AddRequired(OidcConstants.TokenRequest.RedirectUri, request.RedirectUri); clone.Parameters.AddOptional(OidcConstants.TokenRequest.CodeVerifier, request.CodeVerifier); foreach (var resource in request.Resource) { clone.Parameters.AddRequired(OidcConstants.TokenRequest.Resource, resource, allowDuplicates: true); } return(await client.RequestTokenAsync(clone, cancellationToken).ConfigureAwait()); }
/// <summary> /// Sends a token request using the authorization_code grant type. /// </summary> /// <param name="client">The client.</param> /// <param name="request">The request.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public static async Task <TokenResponse> RequestAuthorizationCodeTokenAsync(this HttpClient client, AuthorizationCodeTokenRequest request, CancellationToken cancellationToken = default) { request.GrantType = OidcConstants.GrantTypes.AuthorizationCode; request.Parameters.AddRequired(OidcConstants.TokenRequest.Code, request.Code); request.Parameters.AddRequired(OidcConstants.TokenRequest.RedirectUri, request.RedirectUri); request.Parameters.AddOptional(OidcConstants.TokenRequest.CodeVerifier, request.CodeVerifier); return(await client.RequestTokenAsync(request, cancellationToken)); }