Skip to content

Commit

Permalink
leverage msal.net's httpclient factory (#127)
Browse files Browse the repository at this point in the history
  • Loading branch information
jennyf19 authored Apr 24, 2020
1 parent c2f81fd commit 813844b
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 5 deletions.
23 changes: 23 additions & 0 deletions src/Microsoft.Identity.Web/MsalAspNetCoreHttpClientFactory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

using Microsoft.Identity.Client;
using System.Net.Http;

namespace Microsoft.Identity.Web
{
internal class MsalAspNetCoreHttpClientFactory : IMsalHttpClientFactory
{
private IHttpClientFactory _httpClientFactory;

public MsalAspNetCoreHttpClientFactory(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}

public HttpClient GetHttpClient()
{
return _httpClientFactory.CreateClient();
}
}
}
8 changes: 7 additions & 1 deletion src/Microsoft.Identity.Web/TokenAcquisition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Claims;
using System.Threading.Tasks;

Expand All @@ -33,6 +34,7 @@ internal class TokenAcquisition : ITokenAcquisition, ITokenAcquisitionInternal
private IConfidentialClientApplication _application;
private readonly IHttpContextAccessor _httpContextAccessor;
private HttpContext CurrentHttpContext => _httpContextAccessor.HttpContext;
private IMsalHttpClientFactory _httpClientFactory;
private readonly ILogger _logger;

/// <summary>
Expand All @@ -48,12 +50,14 @@ public TokenAcquisition(
IHttpContextAccessor httpContextAccessor,
IOptions<MicrosoftIdentityOptions> microsoftIdentityOptions,
IOptions<ConfidentialClientApplicationOptions> applicationOptions,
IHttpClientFactory httpClientFactory,
ILogger<TokenAcquisition> logger)
{
_httpContextAccessor = httpContextAccessor;
_microsoftIdentityOptions = microsoftIdentityOptions.Value;
_applicationOptions = applicationOptions.Value;
_tokenCacheProvider = tokenCacheProvider;
_httpClientFactory = new MsalAspNetCoreHttpClientFactory(httpClientFactory);
_logger = logger;
}

Expand Down Expand Up @@ -337,7 +341,7 @@ private async Task<IConfidentialClientApplication> BuildConfidentialClientApplic
request.PathBase,
_microsoftIdentityOptions.CallbackPath.Value ?? string.Empty);

if (!_applicationOptions.Instance.EndsWith("/"))
if (!_applicationOptions.Instance.EndsWith("/", StringComparison.InvariantCulture))
_applicationOptions.Instance += "/";

string authority;
Expand All @@ -352,6 +356,7 @@ private async Task<IConfidentialClientApplication> BuildConfidentialClientApplic
.CreateWithApplicationOptions(_applicationOptions)
.WithRedirectUri(currentUri)
.WithB2CAuthority(authority)
.WithHttpClientFactory(_httpClientFactory)
.Build();
}
else
Expand All @@ -362,6 +367,7 @@ private async Task<IConfidentialClientApplication> BuildConfidentialClientApplic
.CreateWithApplicationOptions(_applicationOptions)
.WithRedirectUri(currentUri)
.WithAuthority(authority)
.WithHttpClientFactory(_httpClientFactory)
.Build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public static AuthenticationBuilder AddProtectedWebApi(

builder.Services.AddHttpContextAccessor();
builder.Services.AddSingleton<IJwtBearerMiddlewareDiagnostics, JwtBearerMiddlewareDiagnostics>();
builder.Services.AddHttpClient();

// Change the authentication configuration to accommodate the Microsoft identity platform endpoint (v2.0).
builder.AddJwtBearer(jwtBearerScheme, options =>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ public static AuthenticationBuilder AddSignIn(
{
builder.Services.Configure(openIdConnectScheme, configureOpenIdConnectOptions);
builder.Services.Configure<MicrosoftIdentityOptions>(configureMicrosoftIdentityOptions);
builder.Services.AddHttpClient();

var microsoftIdentityOptions = new MicrosoftIdentityOptions();
configureMicrosoftIdentityOptions(microsoftIdentityOptions);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Microsoft.Identity.Web.TokenCacheProviders.InMemory;
using NSubstitute;
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Xunit;
using Xunit.Abstractions;
Expand Down Expand Up @@ -70,7 +71,7 @@ public async Task GetAccessTokenForApp_ReturnsAccessTokenAsync()
[Fact]
public async Task GetAccessTokenForApp_WithUserScope_MsalServiceExceptionThrownAsync()
{
// Arrange
// Arrange
InitializeTokenAcquisitionObjects();

// Act & Assert
Expand All @@ -91,6 +92,7 @@ private void InitializeTokenAcquisitionObjects()
IOptions<MsalMemoryTokenCacheOptions> tokenOptions = _provider.GetService<IOptions<MsalMemoryTokenCacheOptions>>();
IOptions<ConfidentialClientApplicationOptions> ccOptions = _provider.GetService<IOptions<ConfidentialClientApplicationOptions>>();
ILogger<TokenAcquisition> logger = _provider.GetService<ILogger<TokenAcquisition>>();
IHttpClientFactory httpClientFactory = _provider.GetService<IHttpClientFactory>();

IHttpContextAccessor httpContextAccessor = CreateMockHttpContextAccessor();

Expand All @@ -105,6 +107,7 @@ private void InitializeTokenAcquisitionObjects()
httpContextAccessor,
microsoftIdentityOptions,
ccOptions,
httpClientFactory,
logger);
}

Expand Down Expand Up @@ -141,6 +144,7 @@ private void BuildTheRequiredServices()
));
services.AddLogging();
services.AddInMemoryTokenCaches();
services.AddHttpClient();
_provider = services.BuildServiceProvider();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
"Domain": "msidentitysamplestesting.onmicrosoft.com",
"TenantId": "7f58f645-c190-4ce5-9de4-e2b7acd2a6ab",
"ClientId": "a4c2469b-cf84-4145-8f5f-cb7bacf814bc"
}
,
},
"Kestrel": {
"Endpoints": {
"Http": {
Expand All @@ -19,4 +18,4 @@
}
},
"AllowedHosts": "*"
}
}

0 comments on commit 813844b

Please sign in to comment.