/// <summary> /// Performs a AccessToken Request as described in https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3 /// </summary> public Task <OidcCodeResponse> GetTokens(string authorizationCode, OidcProvider provider, string redirect_uri) { OidcCodeResponse codeResponse = new OidcCodeResponse { AccessToken = authorizationCode, IdToken = authorizationCode }; return(Task.FromResult(codeResponse)); }
/// <summary> /// Performs a AccessToken Request as described in https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.3 /// </summary> public async Task <OidcCodeResponse> GetTokens(string authorizationCode, OidcProvider provider, string redirect_uri) { OidcCodeResponse codeResponse = null; Dictionary <string, string> kvps = new Dictionary <string, string>(); // REQUIRED. The authorization code received from the authorization server. kvps.Add("code", authorizationCode); // REQUIRED, if the "redirect_uri" parameter was included in the // authorization request as described in Section 4.1.1, and their values MUST be identical. kvps.Add("redirect_uri", redirect_uri); // REQUIRED. Value MUST be set to "authorization_code". kvps.Add("grant_type", "authorization_code"); // REQUIRED. Value MUST be set to "client_id". kvps.Add("client_id", provider.ClientId); // Client secret. Set if configured if (!string.IsNullOrEmpty(provider.ClientSecret)) { kvps.Add("client_secret", provider.ClientSecret); } FormUrlEncodedContent formUrlEncodedContent = new FormUrlEncodedContent(kvps); HttpResponseMessage response = await _httpClient.PostAsync(provider.TokenEndpoint, formUrlEncodedContent); if (response.StatusCode == System.Net.HttpStatusCode.OK) { string content = await response.Content.ReadAsStringAsync(); codeResponse = JsonSerializer.Deserialize <OidcCodeResponse>(content); } else { _logger.LogError("Getting tokens from code failed with statuscode {StatusCode}", response.StatusCode); } return(codeResponse); }