当尝试使用AcquireTokenByIntegratedWindowsAuth时,出现MSAL错误 "parsing_wstrust_response_failed"。

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

我试图从 AD 或 Azure AD 获取令牌,但我调用 AcquireTokenByIntegratedWindowsAuth 的结果是这样的。

MSAL.Desktop.4.14.0.0.0.MsalClientException.ErrorCode: parsing_wstrust_response: ErrorCode: parsing_wstrust_response_failedMicrosoft.Identity.Client.MsalClientException: 发送请求时发生错误。---> System.Net.Http.HttpRequestException.MsalClientException: An error occurred while sending the request: 在发送请求时发生错误。---> System.Net.WebException.Http.HttpRequestException:发送请求时发生错误。远程服务器返回一个错误。(401)Unauthorized.--> System.Net.WebException: The remote server returned an error: (401) Unauthorized. ---> System.ComponentModel.Win32Exception: 系统无法联系域控制器来服务认证请求。请稍后再试。

根据在Azure中注册我的应用的团队的说法,我是一个公共客户端,我有权利使用'user.read'。

知道会是什么问题吗,这样我就可以把一些情况反馈给我们公司的Azure团队。这可能是我的错,他们的错或者MS的错,我只是想知道该向谁投诉。大部分代码是由Azure门户生成的,我只是将AcquireTokenInteractive的调用改为AcquireTokenByIntegratedWindowsAuth,因为我的最终目标是一直默默地获取token。

    public partial class MainWindow : Window
    {
        string graphAPIEndpoint = "https://graph.microsoft.com/v1.0/me";
        string[] scopes = new string[] { "user.read" };

        public MainWindow()
        {
            InitializeComponent();
        }

        private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
        {
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            AuthenticationResult authResult = null;
            var app = App.PublicClientApp;
            ResultText.Text = string.Empty;
            TokenInfoText.Text = string.Empty;

            var accounts = await app.GetAccountsAsync();
            var firstAccount = accounts.FirstOrDefault();

            try
            {
                authResult = await app.AcquireTokenSilent(scopes, firstAccount)
                    .ExecuteAsync();
            }
            catch (MsalUiRequiredException ex)
            {
                System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");

                try
                {
                    authResult = await app.AcquireTokenByIntegratedWindowsAuth(scopes)
                        .ExecuteAsync(CancellationToken.None);
                }
                catch (MsalException msalex)
                {
                    ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
                }
            }


    public partial class App : Application
    {
        static App()
        {
            _clientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithAuthority($"{Instance}{Tenant}")
                .WithDefaultRedirectUri()
                .Build();
            TokenCacheHelper.EnableSerialization(_clientApp.UserTokenCache);
        }

        private static string ClientId = "<My Client ID>";
        private static string Tenant = "<Our Tenant ID>";
        private static string Instance = "https://login.microsoftonline.com/";
        private static IPublicClientApplication _clientApp ;

        public static IPublicClientApplication PublicClientApp { get { return _clientApp; } }
    }
azure adal
1个回答
1
投票

基于 https:/github.comAzureADmicrosoft-authentication-library-for-dotnetwikiIntegrated-Windows-Authentication。围绕这一问题,有许多制约因素。AcquireTokenByIntegratedWindowsAuth 方法。

如果你是用自己的用户账户进行测试,则必须对你的账户的应用进行同意。另外,使用此Auth流时,不能启用2FA。

对于其他用户,他们将需要同意应用程序访问他们的帐户详细信息,或者租户管理员必须在整个租户范围内使用 Grant admin consent for Tenant 按钮。

此流程仅适用于 "联合用户"(例如,在 AD 中而非 AzureAD 中创建)。

此流程主要针对桌面应用程序。它仅适用于.net桌面、.net核心和Windows通用应用程序。

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