身份服务器4处理过期或已撤销的刷新令牌

时间:2019-09-06 06:20:56

标签: c# asp.net-core oauth oauth-2.0 identityserver4

我正在使用Identity Server 4系统。我们正在使用MvcHybridAutomaticRefresh示例中的确切代码

问题在于此代码。 AutomaticTokenManagementCookieEvents.cs#L73

trait BaseTest extends FunSuite {

    protected def test1(): Unit = test("This is test 1") { ... }

    protected def test2(): Unit = test("This is test 1") { ... }

}

class MainTest1 extends BaseTest {

    // Arrange these is any order you see fit
    test3()
    test2()
    test1()

    protected def test3(): Unit = test("This is a test specific to MainTest1") { ... }

}

class MainTest2 extends BaseTest {

    // Arrange these is any order you see fit
    test2()
    test3()
    test1()

    protected def test3(): Unit = test("This is a test specific to MainTest2") { ... }

}

当前,如果管理员撤消了刷新令牌,或者刷新令牌已过期(我们未启用滑动刷新令牌),则应用程序将崩溃。我希望它会将用户重新路由到登录屏幕。

我在此示例中缺少一些无法解决的问题吗?

我也已将其作为问题发布在问题论坛#3599

当前尝试

是在检测错误的位置添加以下内容

var response = await _service.RefreshTokenAsync(refreshToken.Value);
    if (response.IsError)
       {
       _logger.LogWarning("Error refreshing token: {error}", response.Error);
       return;
       }
我曾希望

将用户注销。这只是挂,永远不会去任何地方。它甚至没有使您退出服务器。

当前解决方案

我目前只能找到远程工作的唯一方法是在api调用中添加一个catch。这并不理想,因为在我们的实际应用程序中,我们有很多api调用,这意味着需要对我们的应用程序进行大量更改。是否有办法直接从中间穿戴本身强制登录?

await context.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

1 个答案:

答案 0 :(得分:1)

您可以仅添加一行以强制中间件再次执行挑战:

if (response.IsError)
{
    _logger.LogWarning("Error refreshing token: {error}", response.Error);
    context.RejectPrincipal();
    return;
}