我尝试使用OpenIddict库获取访问权限并刷新令牌。
请求访问令牌时,一切似乎都很好。但是在添加scope = offline_access时,会返回500内部服务器错误。
使用postman和grant_type =密码,并设置用户名和密码,将返回有效的access_token。
但在追加scope = offline_access后,状态为500内部服务器错误。
我用
注册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调用,则错误消失,但不会返回刷新令牌。
现在转圈圈。任何帮助非常感谢。