2

我正在尝试使用 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 调用,错误就会消失,但不会返回任何刷新令牌。

现在在兜圈子。非常感谢任何帮助。

4

0 回答 0