gpt4 book ai didi

http - 当 API 使用 Introspection 进行 HTTP token 身份验证时,如果 Introspection 服务器关闭或返回 500,它应该返回什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:21:12 29 4
gpt4 key购买 nike

当 API 使用 Introspection 进行 HTTP token 身份验证时,如果 Introspection 服务器关闭或返回 500,它应该返回什么?

我正在编写 API 并希望遵守 Http 标准。如果 API 无法验证 token (由于自定义 Introspection 服务器关闭或返回 500),API 应该返回 401、422 还是 500?

此外,如果此 token 内省(introspection)端点不是 Oauth 端点,它是否应该返回相同的 Http 代码?

我做了一些研究,发现:

  1. https://tools.ietf.org/id/draft-ietf-oauth-v2-bearer-11.xml#authn-header这表示:“如果 protected 资源请求包含访问 token 和身份验证失败,资源服务器应该包含错误属性以向客户端提供访问请求被拒绝的原因。参数值为在第 3.1 节中描述。​​此外,资源服务器可以包含 error_description 属性,为开发人员提供人类可读的解释,而不是向最终用户显示。”

  2. https://tools.ietf.org/id/draft-ietf-oauth-v2-bearer-11.xml#resource-error-codes

这表示:“提供的访问 token 已过期、撤销、格式错误或由于其他原因无效。资源应该以 HTTP 401(未授权)状态代码响应。”

现在,以上内容让我认为,在给定的情况下,使用 Oauth Introspection 时,401 是正确的方法,而不是 500。原因是身份验证不是成功 = 失败。这听起来正确吗?此外,这对于非 Oauth 内省(introspection)是否应该相同?

我查看了 Microsoft 的 .net 核心 API 内省(introspection)包代码。它表明他们在这种情况下返回 401。代码位于:https://github.com/aspnet-contrib/AspNet.Security.OAuth.Extensions/blob/dev/src/AspNet.Security.OAuth.Introspection/OAuthIntrospectionHandler.cs

相关部分是:

// Return a failed authentication result if the introspection
// request failed or if the "active" claim was false.
var payload = await GetIntrospectionPayloadAsync(token);
if (payload == null || !payload.Value<bool>(OAuthIntrospectionConstants.Claims.Active))
{
Context.Features.Set(new OAuthIntrospectionFeature
{
Error = new OAuthIntrospectionError
{
Error = OAuthIntrospectionConstants.Errors.InvalidToken,
ErrorDescription = "The access token is not valid."
}
});

return AuthenticateResult.Fail("Authentication failed because the authorization " +
"server rejected the access token.");
}

最后我遇到了这个: https://www.rfc-editor.org/rfc/rfc6750#section-2.1

其中说:“如果 protected 资源请求不包括身份验证凭据或不包含启用访问的访问 token 到 protected 资源,资源服务器必须包含 HTTP“WWW-Authenticate”响应头域;它可能包含在对其他条件也有反应。”

最佳答案

您绝对不希望出现 4xx 错误,因为它表明它可能可以由客户端解决,或者至少是客户端错误。这显然是中断,因此您的错误代码至少应以 5 开头。

如果您正在访问外部服务,该服务已关闭或发生故障并且该服务很关键(例如:就回退而言您无能为力)最合适的状态代码可能是 503 Service Unavailable.

关于http - 当 API 使用 Introspection 进行 HTTP token 身份验证时,如果 Introspection 服务器关闭或返回 500,它应该返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172061/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com