MSAL.NET 可以从 IMsalHttpClientFactory 获取其 HTTP 传输。包装一个为代理配置的客户端:

sealed class TokenHttpFactory : IMsalHttpClientFactory
{
    private readonly HttpClient client;

    public TokenHttpFactory(HttpClient client)
    {
        this.client = client;
    }

    public HttpClient GetHttpClient() => client;
}

在应用程序的整个生命周期内只创建一次处理程序和客户端,然后在现有 MSAL 生成器配置期间附加该工厂:

var proxy = new WebProxy("http://proxy.example:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
var tokenHttp = new HttpClient(handler);

builder.WithHttpClientFactory(new TokenHttpFactory(tokenHttp));

该生成器是应用程序现有的 MSAL 应用程序生成器;保留其 authority、客户端注册和凭据配置。对于允许的、可公开访问且无需代理账户的 HTTPS authority 路由,来自 HTTP 代理列表的 HTTP 地址可以填入示例 WebProxy。 需要时在 WebProxy 上配置代理凭据。

工厂必须是线程安全的。重复使用该客户端,而不是在每次 GetHttpClient 调用中新建一个。MSAL 不会释放所提供的客户端;其所有者管理该生命周期。

这控制 MSAL 的 HTTP 请求。交互式登录可能打开一个网络独立的浏览器。因此,浏览器登录成功并不能证明令牌的 HTTP 客户端走的是同一路由。

相关文章