使用 MSAL 从 Xamarin.ios 授权时出现 SecurityTokenInvalidSignatureException

SecurityTokenInvalidSignatureException when authorizing from Xamarin.ios using MSAL

我有一个 .NET Core Web 应用程序和 Web Api,我从 IOS 应用程序调用(使用 Xamarin.ios)。 Web 应用程序托管在私人服务器上的 IIS 中。我正在使用 MSAL 单租户进行身份验证。那部分似乎工作正常,因为我可以登录并获得访问令牌。

浏览器工作正常,我可以导航到 WebApi 没问题。但是,当我尝试向我的 Api 发出 http 请求时,我在我的应用程序中收到 401。这是电话:

string accessToken = await SecureStorage.GetAsync("AccessToken");
_httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//_httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

HttpResponseMessage response = await _httpClient.GetAsync($"api/{uriSuffix}");
response.EnsureSuccessStatusCode();
string reply = await response.Content.ReadAsStringAsync();
return reply;

正在调试服务器,我得到:

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: 'IDX10511: Signature validation failed. 

在异常的 PII 中,它有我的电子邮件、姓名等,让我相信它成功地从令牌中获取了我的信息。

有什么想法吗?

我终于弄清楚了问题所在(或者至少让它起作用了)。这与观众有关。你说观众是什么?我不能告诉你。但是我的没有用,因为它是单租户。我阅读的大多数教程都使用 multi-tentant,处理方式不同。

更改如下:

  private IPublicClientApplication _pca;
        readonly string[] Scopes = 
        {
            "<tenant_id>/<api_permission>"
        };

        public AuthenticationHelper()
        {
            _pca = PublicClientApplicationBuilder.Create(<tenant_id>)
                .WithIosKeychainSecurityGroup("com.microsoft.adalcache")
                .WithRedirectUri("msauth.<bundle_id>://auth")
                .WithAuthority("https://login.microsoftonline.com/<client_id>/v2.0")
                .Build();
        }

重要的一点是 "Scopes" 变量。请注意,我在 api 权限前加上 "tenant_id\",其中 tenant_id 是我租户的 GUID。一旦我添加了它,它就起作用了。