Skip to content

Commit

Permalink
fix bearer headers to use httpRequestMessage, initial commit (#353)
Browse files Browse the repository at this point in the history
* fix bearer headers to use httpRequestMessage, initial commit

* Add b2c sample changes

* fix templates

* fix httpmethod

* one more fix for templates

* changes to blazor dev sample

* add componentsweb

* re-add AT line that accidently removed
  • Loading branch information
jennyf19 authored Jul 22, 2020
1 parent 50f5660 commit b694b72
Show file tree
Hide file tree
Showing 8 changed files with 94 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");

HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
59 changes: 38 additions & 21 deletions tests/B2CWebAppCallsWebApi/Client/Services/TodoListService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,15 @@ public TodoListService(ITokenAcquisition tokenAcquisition, HttpClient httpClient

public async Task<Todo> AddAsync(Todo todo)
{
await PrepareAuthenticatedClient(null);
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist",
HttpMethod.Post);

var jsonRequest = JsonSerializer.Serialize(todo);
var jsoncontent = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
httpRequestMessage.Content = jsoncontent;

var response = await _httpClient.PostAsync($"{ _TodoListBaseAddress}/api/todolist", jsoncontent);
var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -71,9 +74,11 @@ public async Task<Todo> AddAsync(Todo todo)

public async Task DeleteAsync(int id)
{
await PrepareAuthenticatedClient(null);
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{id}",
HttpMethod.Delete);

var response = await _httpClient.DeleteAsync($"{ _TodoListBaseAddress}/api/todolist/{id}");
var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -85,12 +90,15 @@ public async Task DeleteAsync(int id)

public async Task<Todo> EditAsync(Todo todo)
{
await PrepareAuthenticatedClient(null);
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{todo.Id}",
HttpMethod.Patch);

var jsonRequest = JsonSerializer.Serialize(todo);
var jsoncontent = new StringContent(jsonRequest, Encoding.UTF8, "application/json-patch+json");

var response = await _httpClient.PatchAsync($"{ _TodoListBaseAddress}/api/todolist/{todo.Id}", jsoncontent);
httpRequestMessage.Content = jsoncontent;
var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -105,9 +113,11 @@ public async Task<Todo> EditAsync(Todo todo)

public async Task<IEnumerable<Todo>> GetAsync(string userFlow)
{
await PrepareAuthenticatedClient(userFlow);

var response = await _httpClient.GetAsync($"{ _TodoListBaseAddress}/api/todolist");
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist",
HttpMethod.Get,
userFlow);
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
Expand All @@ -119,21 +129,13 @@ public async Task<IEnumerable<Todo>> GetAsync(string userFlow)
throw new HttpRequestException($"Invalid status code in the HttpResponseMessage: {response.StatusCode}.");
}

private async Task PrepareAuthenticatedClient(string userFlow)
{
// Each user flow is a separate authorization server.
// specify which user flow is connected to the web API.
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _TodoListScope, }, userFlow:userFlow);
Debug.WriteLine($"access token-{accessToken}");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}

public async Task<Todo> GetAsync(int id)
{
await PrepareAuthenticatedClient(null);
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{id}",
HttpMethod.Get);

var response = await _httpClient.GetAsync($"{ _TodoListBaseAddress}/api/todolist/{id}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
Expand All @@ -144,5 +146,20 @@ public async Task<Todo> GetAsync(int id)

throw new HttpRequestException($"Invalid status code in the HttpResponseMessage: {response.StatusCode}.");
}

private async Task<HttpRequestMessage> PrepareAuthenticatedClient(
string url,
HttpMethod httpMethod,
string userFlow = null)
{
// Each user flow is a separate authorization server.
// specify which user flow is connected to the web API.
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _TodoListScope, }, userFlow: userFlow);
Debug.WriteLine($"access token-{accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(httpMethod, url);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");
httpRequestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return httpRequestMessage;
}
}
}
5 changes: 3 additions & 2 deletions tests/BlazorServerCallsGraph/Services/DownstreamWebApi.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,10 +55,11 @@ public async Task<string> CallWebApi(string relativeEndpoint = "", string[] requ
string apiUrl = (_configuration["CalledApi:CalledApiUrl"] as string)?.TrimEnd('/') + $"/{relativeEndpoint}";

string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(scopes);
_httpClient.DefaultRequestHeaders.Add("Authorization", $"bearer {accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, apiUrl);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");

string apiResult;
var response = await _httpClient.GetAsync($"{apiUrl}");
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
apiResult = await response.Content.ReadAsStringAsync();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,15 @@ public TodoListService(ITokenAcquisition tokenAcquisition, HttpClient httpClient

public async Task<Todo> AddAsync(Todo todo)
{
await PrepareAuthenticatedClient();
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist",
HttpMethod.Post);

var jsonRequest = JsonSerializer.Serialize(todo);
var jsoncontent = new StringContent(jsonRequest, Encoding.UTF8, "application/json");
var response = await this._httpClient.PostAsync($"{ _TodoListBaseAddress}/api/todolist", jsoncontent);
httpRequestMessage.Content = jsoncontent;

var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -70,9 +74,11 @@ public async Task<Todo> AddAsync(Todo todo)

public async Task DeleteAsync(int id)
{
await PrepareAuthenticatedClient();
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{id}",
HttpMethod.Delete);

var response = await _httpClient.DeleteAsync($"{ _TodoListBaseAddress}/api/todolist/{id}");
var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -84,11 +90,15 @@ public async Task DeleteAsync(int id)

public async Task<Todo> EditAsync(Todo todo)
{
await PrepareAuthenticatedClient();
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{todo.Id}",
HttpMethod.Patch);

var jsonRequest = JsonSerializer.Serialize(todo);
var jsoncontent = new StringContent(jsonRequest, Encoding.UTF8, "application/json-patch+json");
var response = await _httpClient.PatchAsync($"{ _TodoListBaseAddress}/api/todolist/{todo.Id}", jsoncontent);

httpRequestMessage.Content = jsoncontent;
var response = await _httpClient.SendAsync(httpRequestMessage);

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -103,9 +113,11 @@ public async Task<Todo> EditAsync(Todo todo)

public async Task<IEnumerable<Todo>> GetAsync()
{
await PrepareAuthenticatedClient();
var response = await _httpClient.GetAsync($"{ _TodoListBaseAddress}/api/todolist");
var content = await response.Content.ReadAsStringAsync();
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist",
HttpMethod.Get);
var response = await _httpClient.SendAsync(httpRequestMessage);
var content = await response.Content.ReadAsStringAsync();

if (response.StatusCode == HttpStatusCode.OK)
{
Expand All @@ -115,18 +127,12 @@ public async Task<IEnumerable<Todo>> GetAsync()
throw new HttpRequestException($"Invalid status code in the HttpResponseMessage: {response.StatusCode}. Cause: {content}");
}

private async Task PrepareAuthenticatedClient()
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _TodoListScope });
Debug.WriteLine($"access token-{accessToken}");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
}

public async Task<Todo> GetAsync(int id)
{
await PrepareAuthenticatedClient();
var response = await _httpClient.GetAsync($"{ _TodoListBaseAddress}/api/todolist/{id}");
var httpRequestMessage = await PrepareAuthenticatedClient(
$"{ _TodoListBaseAddress}/api/todolist/{id}",
HttpMethod.Get);
var response = await _httpClient.SendAsync(httpRequestMessage);
if (response.StatusCode == HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
Expand All @@ -137,5 +143,17 @@ public async Task<Todo> GetAsync(int id)

throw new HttpRequestException($"Invalid status code in the HttpResponseMessage: {response.StatusCode}.");
}

private async Task<HttpRequestMessage> PrepareAuthenticatedClient(
string url,
HttpMethod httpMethod)
{
var accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(new[] { _TodoListScope });
Debug.WriteLine($"access token-{accessToken}");
HttpRequestMessage httpRequestMessage = new HttpRequestMessage(httpMethod, url);
httpRequestMessage.Headers.Add("Authorization", $"bearer {accessToken}");
httpRequestMessage.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
return httpRequestMessage;
}
}
}

0 comments on commit b694b72

Please sign in to comment.