gpt4 book ai didi

c# - 调用 token 端点时出现 MissingExceptionMethod 错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:29:48 26 4
gpt4 key购买 nike

好的,我有一个使用 Openiddict 进行 token 授权的 .NET Core 项目。直到今天我突然收到 MissingExceptionMethod 错误时,它一直运行良好。真正奇怪的是,同样的事情发生在上周完美运行的代码版本上。就好像它突然破裂了,什么都没有改变。奇怪的是,这在 Openiddict 之前发生过,更新修复了它,但这次没有可用的更新。我正在使用 .NET Core 1.1.1、Identity Framework 1.1.1 和 Openiddict 10.0.-beta2-0584。

这是完整的错误:

    System.MissingMethodException: Method not found: 'Void AspNet.Security.OpenIdConnect.Primitives.OpenIdConnectResponse.set_RedirectUri(System.String)'.
at AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerHandler.<HandleSignInAsync>d__5.MoveNext()
at System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.Start[TStateMachine](TStateMachine& stateMachine)
at AspNet.Security.OpenIdConnect.Server.OpenIdConnectServerHandler.HandleSignInAsync(AuthenticationTicket ticket)
at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.<SignInAsync>d__66.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.AspNetCore.Http.Authentication.Internal.DefaultAuthenticationManager.<SignInAsync>d__14.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.AspNetCore.Mvc.SignInResult.<ExecuteResultAsync>d__14.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.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeResultAsync>d__30.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.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResultFilterAsync>d__28.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResultExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResourceFilter>d__22.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__20.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.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.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.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.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.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.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.AspNetCore.Diagnostics.EntityFrameworkCore.MigrationsEndPointMiddleware.<Invoke>d__5.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.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.<Invoke>d__6.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.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.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.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()

这是 token 端点代码:

[HttpPost("token"), Produces("application/json")]
public async Task<IActionResult> Token(OpenIdConnectRequest request, string permissions, string appId)
{
Debug.Assert(request.IsTokenRequest(),
"The OpenIddict binder for ASP.NET Core MVC is not registered. " +
"Make sure services.AddOpenIddict().AddMvcBinders() is correctly called.");

if (request.IsPasswordGrantType())
{
var user = await _userManager.FindByNameAsync(request.Username);

var accountTest = await TestAccount(request, user);
if (accountTest != null)
return BadRequest(accountTest.ErrorDescription);

// Create a new authentication ticket.
AuthenticationTicket ticket;
if (permissions != null && permissions.ToLower() == "ui")
ticket = await CreateTicketAsync(request, user, appId, null, true);
else
ticket = await CreateTicketAsync(request, user, appId, null, false);

return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
}

return BadRequest("UNABLETOLOGIN");

事实上,它似乎在寻找重定向代码,这让我想知道它是否突然尝试在出现错误时重定向而不是返回状态代码,但我已经很长时间没有更改任何内容了。下面是Openiddict等的初始化代码:

services.AddDbContext<AxiomIdentityDbContext>(builder =>
{
builder.UseSqlServer(connectionString);
builder.UseOpenIddict();
});

services.AddIdentity<AxiomApplicationUser, IdentityRole>(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Password.RequireUppercase = false;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequiredLength = 6;
})
.AddEntityFrameworkStores<AxiomIdentityDbContext>()
.AddDefaultTokenProviders();

services.Configure<IdentityOptions>(options =>
{
options.ClaimsIdentity.UserNameClaimType = OpenIdConnectConstants.Claims.Name;
options.ClaimsIdentity.UserIdClaimType = OpenIdConnectConstants.Claims.Subject;

options.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents
{
OnRedirectToLogin = async ctx =>
{
if (ctx.Request.Path.StartsWithSegments(configuration["Routes:AxiomApiRoute"]) &&
ctx.Response.StatusCode == 200)
{
ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
var data = Encoding.UTF8.GetBytes(string.Join(",", ctx.Request.Cookies.Keys));
await ctx.Response.Body.WriteAsync(data, 0, data.Length);
}
else
{
ctx.Response.Redirect(ctx.RedirectUri);
}
}
};

options.Cookies.ApplicationCookie.CookieSecure = CookieSecurePolicy.None;
options.Cookies.ApplicationCookie.CookieHttpOnly = false;
});

services.AddOpenIddict(options =>
{
options.AddEntityFrameworkCoreStores<AxiomIdentityDbContext>();
options.AddMvcBinders();
options.EnableTokenEndpoint("/api/authorization/token");
options.EnableUserinfoEndpoint("/api/authorization/userinfo");
options.AllowPasswordFlow();
options.DisableHttpsRequirement();
options.AllowRefreshTokenFlow();
options.SetAccessTokenLifetime(new TimeSpan(0, 3600, 0));
options.SetRefreshTokenLifetime(new TimeSpan(30, 0, 0, 0));
});

services.Configure<IdentityOptions>(config =>
{
config.Cookies.ApplicationCookie.Events =
new CookieAuthenticationEvents()
{
OnRedirectToLogin = (ctx) =>
{
if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
{
ctx.Response.StatusCode = 401;
}

return Task.CompletedTask;
},
OnRedirectToAccessDenied = (ctx) =>
{
if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
{
ctx.Response.StatusCode = 403;
}

return Task.CompletedTask;
}
};

});

知道这个错误可能来自哪里吗?

更新 - 这是 csproj

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard1.6</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<AssemblyName>Axiom.Web.Api.Authentication</AssemblyName>
<PackageId>Axiom.Web.Api.Authentication</PackageId>
<NetStandardImplicitPackageVersion>1.6.1</NetStandardImplicitPackageVersion>
<PackageTargetFallback>$(PackageTargetFallback);dnxcore50</PackageTargetFallback>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Axiom.Common.Web\Axiom.Common.Web.csproj" />
<ProjectReference Include="..\Axiom.Services.Interfaces\Axiom.Services.Interfaces.csproj" />
<ProjectReference Include="..\Axiom.Services.Implementations\Axiom.Services.Implementations.csproj" />
<ProjectReference Include="..\Axiom.DataAccess.EntityFramework\Axiom.DataAccess.EntityFramework.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="1.1.0" />
<PackageReference Include="AspNet.Security.OAuth.Validation" Version="1.0.0-beta1-final" />
<PackageReference Include="OpenIddict" Version="1.0.0-beta2-0584" />
<PackageReference Include="OpenIddict.Mvc" Version="1.0.0-beta2-0584" />
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.1.3" />
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Cors" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="1.1.1" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.1" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.1" />
</ItemGroup>

</Project>

最佳答案

您看到的问题是由版本不匹配引起的:确保您的所有项目都引用了最新版本 (1.0.0-beta2-0584),它应该可以正常工作。

关于c# - 调用 token 端点时出现 MissingExceptionMethod 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43194140/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com