1

我收到以下代码错误: var authResult = await authContext.AcquireTokenAsync(Url, appCred, new UserAssertion(accessToken));

授权码

var clientID = ConfigurationManager.AppSettings["ClientID"];
                var clientSecret = ConfigurationManager.AppSettings["ClientSecret"];
                var tenant = ConfigurationManager.AppSettings["Tenant"];

                var appCred = new ClientCredential(clientID, clientSecret);
                
                var authContext = new AuthenticationContext(
                    "https://login.microsoftonline.com/" + tenant);
                
var authResult = await authContext.AcquireTokenAsync(Url, appCred,
                    new UserAssertion(accessToken));

错误:

断言签名验证失败。[原因 - 提供的签名值与预期的签名值不匹配。,客户端使用的密钥指纹:' ',找到密钥 'Start= **'] 跟踪 ID:603df266-b9b4-4b27-8216-effc8b879a01 相关 ID: 9a7990ea-41ae-47a0-97da-ceb7cb07ecf0 时间戳:2021-08-09 06:46:28Z 在 Microsoft.IdentityModel.Clients.ActiveDirectory.AdalHttpClient.d__211.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.IdentityModel.Clients.ActiveDirectory.AdalHttpClient.<GetResponseAsync>d__201.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 Microsoft .IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__67.MoveNext() --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 的 System.Runtime.CompilerServices 中从先前引发异常的位置结束堆栈跟踪。 Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__64.MoveNext() 处的 TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw 上一个抛出异常的位置结束堆栈跟踪() 在 System.Runtime.CompilerServices。Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenOnBehalfHandler.d__2.MoveNext() 处的 TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw 上一个抛出异常的位置结束堆栈跟踪() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.d__55.MoveNext() --- 堆栈跟踪从以前抛出异常的位置结束--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__50。MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 Microsoft.IdentityModel 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() .Clients.ActiveDirectory.AuthenticationContext.d__35.MoveNext() --- 在 System.Runtime.CompilerServices.TaskAwaiter 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处从先前引发异常的位置结束堆栈跟踪。 HandleNonSuccessAndDebuggerNotification(Task task) at SpoWebApi.Controllers.AlbathaServicesController.d__13.MoveNext() in .ServicesController.cs:line 378 Microsoft.IdentityModel.Clients.ActiveDirectoryMicrosoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__35.MoveNext() 处的 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo 上一个抛出异常的位置结束堆栈跟踪.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 SpoWebApi.Controllers.AlbathaServicesController.d__13.MoveNext() 在 .ServicesController.cs:line 378 Microsoft.IdentityModel.Clients.ActiveDirectoryMicrosoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.d__35.MoveNext() 处的 CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo 上一个抛出异常的位置结束堆栈跟踪.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 SpoWebApi.Controllers.AlbathaServicesController.d__13.MoveNext() 在 .ServicesController.cs:line 378 Microsoft.IdentityModel.Clients.ActiveDirectoryExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at SpoWebApi.Controllers.AlbathaServicesController.d__13.MoveNext() in .ServicesController.cs:line 378 Microsoft.IdentityModel.Clients.ActiveDirectoryExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at SpoWebApi.Controllers.AlbathaServicesController.d__13.MoveNext() in .ServicesController.cs:line 378 Microsoft.IdentityModel.Clients.ActiveDirectory

4

1 回答 1

1

我认为您的代码有一点问题,为了获取令牌,您可以尝试以下方式,这是您的代码中缺少的,第一步是获取令牌,但在这里new UserAssertion(accessToken));您传递token的是如何获得这个?

除此之外,如果这部分是为了获取令牌,那么这部分应该如下所示:

        [HttpPost]
        public async Task<IActionResult> GetAccessToken()
        {
            // Approach 1
            AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.com/" + "Tenant");
            ClientCredential clientCredential = new ClientCredential("ClientId", "Secret");
            var authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com", clientCredential); //Your Scope and App Credentials

            // Approach 2
            var clientID = "";
            var clientSecret = "";
            var tenant = "";

            var appCred = new ClientCredential(clientID, clientSecret);

            var authContext = new AuthenticationContext(
                "https://login.microsoftonline.com/" + tenant);

            var authResult = await authContext.AcquireTokenAsync("https://graph.microsoft.com", appCred);


            return Ok();
        }

如您所见,我按预期获得了令牌。你可以参考这个官方文档here

在此处输入图像描述

希望它会有所帮助。

于 2021-08-09T10:01:37.107 回答