4

我已经配置了如下所述的撤销和注销端点。

.AddOpenIdConnectServer(options =>
{
    options.LogoutEndpointPath = "/logout";
    options.RevocationEndpointPath = "/revoke";
}

但两者都不起作用令牌撤销不会过期/撤销令牌。

对于Token Revocation,我调试了代码,发现它在下面提到的代码中拒绝OpenIdConnectServerHandler类中的上下文。

var context = new ValidateRevocationRequestContext(Context, Scheme, Options, request); await Provider.ValidateRevocationRequest(context);

context.IsRejected 在上述方法之后为真

request(post) 包含 clientId、clientsecret、token 作为访问令牌或刷新令牌和 token_hint_type。我没有得出结论,为什么会这样?

更新 1:

通过下面提到的代码进行上下文验证。

public override async Task ValidateRevocationRequest(ValidateRevocationRequestContext context) { context.Validate(); }

现在我通过调试 ASOS 代码了解到令牌撤销没有内置逻辑,对吗?如果这是这种情况,那么我需要编写我的自定义逻辑来撤销令牌

public override async Task HandleRevocationRequest(HandleRevocationRequestContext context) {.. code }

现在我想知道撤销令牌(访问和刷新)的方法是什么,因为它们是自包含的,而不是像 openiddict 那样存储在数据库中(我看过 openiddict 的撤销逻辑)。

4

1 回答 1

0

现在我通过调试 ASOS 代码了解到令牌撤销没有内置逻辑,对吗?如果这是这种情况,那么我需要编写我的自定义逻辑来撤销令牌

没错:ASOS 是完全无状态的。

你如何实现这完全是你自己的决定。您可以使用表来存储令牌条目,例如 OpenIddict(根据Serialize*Token事件创建)或带有已撤销令牌标识符的黑名单。

更多信息在这里:AspNet.Security.OpenIdConnect.Server。刷新令牌

于 2019-09-03T16:37:55.200 回答