我正在尝试使用 OpenIddict 库获取访问和刷新令牌。
请求访问令牌时一切似乎都很好。但是当添加 scope = offline_access 时,会返回 500 Internal Server Error。
使用带有 grant_type = 密码的 Postman,并设置了用户名和密码,将返回一个有效的 access_token。
但在添加 scope = offline_access 后,状态为 500 Internal Server Error。
我注册了 OpenIddict 服务
services.AddOpenIddict(options => {
options.AddEntityFrameworkCoreStores<dbContext>();
options.AddMvcBinders();
options.EnableTokenEndpoint("/connect/token");
options.AllowPasswordFlow();
options.AllowRefreshTokenFlow();
options.AddEphemeralSigningKey();
options.DisableHttpsRequirement();
});
我注册了 OpenIddict 和验证中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseOAuthValidation(options => {
options.AutomaticAuthenticate = true;
options.AutomaticChallenge = true;
});
app.UseOpenIddict();
app.UseMvcWithDefaultRoute();
}
并创建一个令牌认证控制器
[HttpPost("~/connect/token"), Produces("application/json")]
public async Task<IActionResult> Exchange(OpenIdConnectRequest request)
{
if (request.IsPasswordGrantType())
{
var identity = new ClaimsIdentity(OpenIdConnectServerDefaults.AuthenticationScheme);
identity.AddClaim(OpenIdConnectConstants.Claims.Subject,
user.Id.ToString,
OpenIdConnectConstants.Destinations.AccessToken);
var ticket = new AuthenticationTicket(
new ClaimsPrincipal(identity),
new AuthenticationProperties(),
OpenIdConnectServerDefaults.AuthenticationScheme);
ticket.SetResources(request.GetResources());
ticket.SetScopes(request.GetScopes());
return SignIn(ticket.Principal, ticket.Properties, ticket.AuthenticationScheme);
}
}
如果删除 SetScopes 调用,错误就会消失,但不会返回任何刷新令牌。
现在在兜圈子。非常感谢任何帮助。