tri*_*nvh 5 asp.net-core openiddict
我按照 openiddict 服务器示例中的说明使用https://github.com/openiddict/openiddict-samples/tree/master/samples/PasswordFlow中的密码流 但没有成功。
它抛出InvalidOperationException: 无法从此端点在路由/connect/token返回 OpenID Connect 响应:
return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
邮递员参数:
我花了一天时间进行研究,但没有关于无法从此端点异常返回的信息。除了我之外,很多人都可以运行 openiddict 示例。
这是 Startup.cs 的一部分:
services.AddEntityFrameworkSqlite()
.AddDbContext<MisapayContext>(options =>
{
options.UseOpenIddict<int>();
});
//....
services.AddOpenIddict<int>()
.AddEntityFrameworkCoreStores<MisapayContext>()
.DisableHttpsRequirement()
.EnableTokenEndpoint("/connect/token")
.EnableLogoutEndpoint("/connect/logout")
.EnableUserinfoEndpoint("/connect/userinfo")
.UseJsonWebTokens()
.AllowPasswordFlow()
.AllowRefreshTokenFlow()
.AddEphemeralSigningKey();
services.AddMvc(config =>
{
config.Filters.Add(new ApiExceptionFilter());
}).AddJsonOptions(options =>
{
options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
options.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
});
Run Code Online (Sandbox Code Playgroud)
编辑:我认为问题是OpenIdConnectRequest,如果使用它则无法绑定:
OpenIddictBuiler.AddMvcBinders()
将抛出无法从 ASP.NET 上下文检索 OpenID Connect 请求。
否则,去掉它,AuthorizationController中的OpenIdConnectRequest就可以正常获取。我可以获取请求信息,例如用户名、密码 grantType 等...奇怪...对吧?
其他一些信息:
任何帮助将不胜感激!
好的,这就是发生的事情:
/connect/token
令牌端点地址。/connect/token/
,这实际上是一个完全不同的 URL ( /connect/token
!= /connect/token/
)。/connect/token/
请求并调用Exchange
操作,即使路由与请求的 URL 不匹配。OpenIdConnectRequest
,这允许OpenIdConnectRequest.GrantType
从无效参数中解析参数grantType
(使用专用的 OpenIddict 绑定器不会发生这种情况)。SignIn
以返回令牌响应。SignIn
在正常令牌请求处理之外调用 - 因为由于路径差异,它没有将该请求视为令牌请求 - 并通过抛出InvalidOperationException
.我将联系 MVC 人员以确保他们意识到这个错误。
编辑:经过一些研究,看起来这种行为是“设计使然”并且是从 ASP.NET MVC 继承的。我在 aspnet/Mvc 存储库中打开了一个功能请求,以添加一种使用“严格比较”进行路由匹配的新方法。
归档时间: |
|
查看次数: |
3836 次 |
最近记录: |