如何使用OpenIddict使刷新和注销刷新和访问令牌无效(使用内存数据库)

时间:2019-12-30 18:28:21

标签: c# asp.net-core logout refresh-token openiddict

我有一个使用OpenIddict的.NET Core 2.1 Web API项目。

TLDR:在给出here的示例之后,我需要用于执行注销请求的示例,以使一个用户的刷新令牌和访问令牌无效。

长版:

我迷失了试图写一条路由来“注销”访问令牌和刷新令牌以及当前刷新令牌的路径。

我们不使用SignInManager 。我在网上看到几个例子。但是我没有找到任何与我们简单的内存中方法匹配的东西。 TokenManager没有SignOut方法。

Startup.cs上的ConfigureServices()部分如下所示:

services.AddDbContext<DbContext>(options =>
{
    options.UseInMemoryDatabase(nameof(DbContext));
    options.UseOpenIddict();
});

services.AddOpenIddict().AddCore(options =>
{
    options.UseEntityFrameworkCore().UseDbContext<DbContext>();
});

services.AddOpenIddict().AddServer(options =>
{
    options.UseMvc();

    options.EnableTokenEndpoint("/api/token").EnableLogoutEndpoint("/api/logout");

    options.AllowPasswordFlow();
    options.AllowRefreshTokenFlow();
    options.SetAccessTokenLifetime(TimeSpan.FromSeconds(60 * 60));
    options.SetRefreshTokenLifetime(TimeSpan.FromSeconds(7 * 24 * 60 * 60));
    options.RegisterScopes(OpenIdConnectConstants.Scopes.OfflineAccess);

    options.DisableHttpsRequirement();
    options.UseRollingTokens();
    options.AcceptAnonymousClients();
});

services.AddOpenIddict().AddValidation();

services.AddAuthentication(options =>
{
    options.DefaultScheme = OAuthValidationDefaults.AuthenticationScheme;
});

检索访问令牌并使用刷新令牌可以很好地工作。

但是我在注销路由中使用什么?

    [HttpGet]
    [Authorize]
    [Route("/api/logout")]
    public async Task<IActionResult> LogoutAsync(OpenIdConnectRequest logoutRequest)
    {
        // ???
    }

尝试某事。如下所示,我看到了一个几乎为空的logoutRequest参数(所有内容均为null,并且只有属性填充了我们拥有logout_request的信息。

    [HttpGet]
    [Authorize]
    [Route("/api/logout")]
    public async Task<IActionResult> LogoutAsync(OpenIdConnectRequest logoutRequest)
    {
        var result = SignOut(OpenIdConnectServerDefaults.AuthenticationScheme);

        return result;
    }

0 个答案:

没有答案