我使用来自https://github.com/openiddict/openiddict-samples/tree/master/samples/PasswordFlow的密码流按照 openiddict 服务器示例中的说明进行操作, 但没有成功。
它抛出InvalidOperationException: An OpenID Connect response cannot be returned from this endpoint at route /connect/token:
return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
邮递员参数:
- 内容类型: application/x-www-form-urlencoded
- 参数: username=..&password=...&grantType=password&scope=offline_access+profile+email
我花了一天的时间进行研究,但没有关于无法从此端点异常返回的信息。除了我之外,很多人都可以运行 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;
});
编辑:我认为问题是OpenIdConnectRequest,如果使用它不能被绑定:
OpenIddictBuiler.AddMvcBinders()
将抛出 OpenID Connect 请求无法从 ASP.NET 上下文中检索到。`
否则,去掉它,AuthorizationController中的OpenIdConnectRequest就可以正常获取了。而且我可以获取请求信息,例如用户名、密码 grantType 等……奇怪……对吧?
其他一些信息:
- ASP.NET 核心 SDK 1.1
- 项目.json:https ://gist.github.com/trinvh/47f29468887c209716098bc4c76181a7
- Startup.cs:https ://gist.github.com/trinvh/75b7a12fbee754d0ea8cf251f2da9fe9
- AuthorizationController.cs:https ://gist.github.com/trinvh/089015b2573cae550856631e72b81374
任何帮助将不胜感激!