当使用MSAL从Xamarin.ios授权时,出现SecurityTokenInvalidSignatureException异常。

问题描述 投票:0回答:1

我有一个.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中,有我的电子邮件,姓名等信息 让我相信它成功地从令牌中获取了我的信息。

有什么办法吗?

c# asp.net-core xamarin.ios azure-active-directory msal
1个回答
0
投票

我终于弄明白了这个问题(或至少让它工作了)。这与Audience有关。你说,观众是什么?我不能告诉你。但我的没有工作,因为它是单租户。我看的大部分教程都是用多租户,处理方式不同。

这就是变化。

  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。我加了这个之后,就成功了。

© www.soinside.com 2019 - 2024. All rights reserved.